2012-01-13 15 views
2

Table_Aがあるとします。両方のフィールドにあるTable_Bに、school_idtype_idの2つのフィールドに参加したいとします。 SQLの場合、これは次のようになります。プライマリキー以外のフィールドの別のテーブルに結合する

私が理解する限り、Djangoはモデルで定義された外部キー/主キーを使用して結合します。したがって、A.objects.filter(B__field2="stuff")を実行する場合は、暗黙的にA.B_id = B.idに参加し、Table_B.field2=stuffWHERE節に入れます。代わりに上記のSQLクエリのように私の選択のキーに参加する方法はありますか?

+0

何らかの理由で 'A.B_id = B.id'が間違っていますか? – jbindel

+0

私はそのように制限したくありません。 'Table_A'がその子ではなくても、' Table_A'が 'Table_B'に加わることを許可します。 – babonk

+0

あなたはそれが最良のあなたの仕事を解決する?あなたのモデルを見せて、得たい結果を記述できますか? – DrTyrsa

答えて

0

それはこのフォームでクエリを表現するためにまだ有効だ場合:

SELECT whatever FROM Table_A, Table_B WHERE (Table_A.school_id = Table_B.school_id 
    AND Table_A.type_id = Table_B.type_id) 

(上記のあなたの一例に相当することになる...)それはDjangoのORMとextra句を経て、これを行うことが可能です例えば:

TableA.objects.extra(
    tables=['myapp_tableb',], 
    where=['myapp_tablea.school_id=myapp_tableb.school_id', 
      'myapp_tablea.type_id=myapp_tableb.type_id'] 
) 

私はおそらくあなたがこれに役立たないSQLで行うことができるいくつかの種類の複雑な結合があることを認識しています。

Djangoのモデル名ではなく、実際のSQLテーブル名を使用する必要があります。元のSQLに少し近いですが、通常のDjango QuerySetオブジェクトを取得します。

関連する問題