2
myapp/models.pyは、このサンプルコードを持っている

ファイル..Djangoで2つのデータベース(外部キーを持たない)でクエリを適用するには?

from django.db import models 

# model for 'user' table in database oracle_dbuser1:user 
class User(models.Model): 
    . . . 
    customerid = models.BigIntegerField() 

# model for 'customer' table in database oracle_dbuser2:customer 
# Note that there is no Foreign key integrity among these legacy tables. 
class Customer(models.Model): 
    . . . 
    customerid = models.BigIntegerField() 

とファイルmyapp/admin.pyは、次のコードを持っています

from maasusers.models import User, Customer 
from django.contrib import admin 

class UserAdmin(admin.ModelAdmin): 
    # A handy constant for the name of the alternate database. 
    db_one = 'dbuser1' 
    db_two = 'dbuser2' 

    # display in a list 
    list_display = (. . .) # question 1 

    def queryset(self, request): 
     result = super(UserAdmin, self).queryset(request).using(self.db_one) # question 2 
     return result 

# Register the Poll class 
admin.site.register(User, UserAdmin) 
admin.site.register(Customer, UserAdmin) 

質問1:上記参照してください:私は両方のテーブルの列を表示したいです。どうすればこれを達成できますか?例えば。 Select usr.col1, usr.col2, cust.col1, cust.col10 from user usr, customer cust where usr.col2 = cust.col3;

質問2:対応するqueryset()関数を書き込むには、using関数を使用しますか?

答えて

2

Database Routersは、クエリーセットでusing()を使用する必要性を避けるのに役立ちます。 djangoにどのデータベースをどのモデルに使用するかを知らせます。私はあなたがルータの周りのドキュメントを徹底的に読むことをお勧めします。以下かかわら

注:myappの中のモデルのいずれかが、他のデータベースの外のモデルとの関係が含まれている場合

この例では動作しません。データベース間の関係は、Djangoが現在処理できない参照整合性の問題をもたらします。

Djangoは、キーを使用して結合するかどうかにかかわらず、データベース間の結合を処理しません。両方のモデルのデータが必要な場合は、2つの別々のクエリを実行し、コード内で自分で結合します。私はこれがどのように管理者に当てはまるかわからない。

別の方法として、データベース内のクロスデータベーステーブルを結合してビューを作成する方法があります。ただし、インスタンスを元に戻すことはできません。

これはあなたの調査の出発点です。

+0

情報と説明をくれてありがとうJosh!うーん..興味深い問題だが.. :( – Aditya369

+2

@ Aditya369おそらく、あなたは正しい答えとしてこの答えをマークしてはいけないかもしれない。あなたが問題を解決する可能性があるそれがうまくいかない理由を教えてくれました。 –

関連する問題