2017-05-24 18 views
1

私はtemp1、temp2、temp3という3つのモデルを持っています。temp1とtemp2はtemp3.idの外部キーを持っています。これは、temp1とtemp2がtemp3.idを介して関連していることを意味します。2つのモデルを別のモデルで結合します。

Class temp1(models.Model): 
    temp3 = models.ForeignKey('temp3', verbose_name=u"temp3", null=True, blank=True) 
    i_y = models.IntegerField('i_Y',null=True, blank=True) 
    iq = models.FloatField('IQ', null=True, blank=True) 



class temp2(models.Model): 
    temp3 = models.ForeignKey('temp3', verbose_name=u"temp3", null=True, blank=True) 
    q_y = models.IntegerField('Y', null=True, blank=True) 
    eq = models.IntegerField('EQ', null=True, blank=True) 
    q_c = models.CharField('category', max_length=1000, null=True, blank=True) 


class temp3(models.Model): 
    title = models.CharField(_('Title'), max_length=400, null=True, blank=True) 

django ORMを使用してtemp1モデルとtemp2モデルの完全な外部結合を行うにはどうすればよいですか? 実際、私はDjangoのORMで、このようなSQLクエリを実行したい:

select temp3.title, temp1.i_y, temp1.iq, temp2.eq,temp2.q_c, temp2.q_y from (select temp1.i_y, temp1.iq, temp1.temp3_id AS first_table_id,temp2.temp3_id AS second_table_id,temp2.eq, temp2.q_c, temp2.q_y from temp1 full outer join temp2 on (temp1.temp3_id = temp2.temp3_id AND temp1.i_y = temp2.q_y)) AS t left outer join temp3 (t.first_table_id = temp3.id OR t.second_table_id = temp3.id) 

私はTEMP3の行ごとに、TEMP1とTEMP2モデル上の複数の行がデシベルであることを言及すべきであると私はすべての行を取得することを目指して参加条件によって満たされている

+1

なぜManyToManyFieldsにthoughパラメータを使用しないでください。 djangoはORMにデフォルトで多くのクエリーセットを提供するので、使いやすいでしょう。https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/ –

答えて

0

あなたは、関連TEMP3を取得し、このTEMP3を参照するすべてのTEMP2のセットを得ることができます:

:1行目に

t1 = temp1.objects.first() 
t3 = t1.temp3 
t2_set = t3.temp2_set.all() 

かを、

t2_set = temp1.objects.first().temp3.temp2_set.all() 

しかし、マイケルは言ったように、可能ならばMany2Manyフィールドを使うべきです。

+0

first()関数は何をしますか? – Mehdi

+0

最初の関数はデータベースから最初のオブジェクトを取得するだけです。完全なリストの場合はall()、get(key = value)のように必要なメソッドに置き換えます。 –

関連する問題