2016-04-23 6 views
0

私はまだDjangoを学んでいます。 Django 1.8以上の知識があり、これについて私に助けてくれる人。私は、このSQLクエリに相当し、クエリを実行したい、これらの5つのテーブルを結合するには問題がある:Django 1.9で複数のテーブルに結合する

SELECT * 
from modelname1 a 
join modelname2 b on a.id = b.id 
join modelname3 c on c.id = b.id 
join modelname4 d on d.id = c.id 
join modelname5 on e.id = d.id; 

私はこれらのモデルを持っている:

class modelname1(models.Model): 
    modelname1_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 

class modelname2(models.Model): 
    modelname2_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 
    c = models.ForeignKey(modelname1) 

class modelname3(models.Model): 
    modelname3_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 
    c = models.ForeignKey(modelname2) 

class modelname4(models.Model): 
    modelname4_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 
    c = models.ForeignKey(modelname3) 

class modelname5(models.Model): 
    modelname5_id = models.AutoField(primary_key = True) 
    a = models.CharField(max_length = 200) 
    b = models.CharField(max_length = 200) 
    c = models.ForeignKey(modelname4) 

私が翻訳する方法がわかりません上記のDjangoの質問 私は同じ答えになったクエリを作ることができますが、私は同じ答えを得る前に複数のクエリに分割する必要があります。 ありがとうございました!

+1

あなたの考え方を変更することをお勧めします。 ORMを使用して、好きなフィールドの値を取得するだけで、クエリに「翻訳」する必要はないでしょう。 – Wtower

+0

あなたは最終的にどのフィールドをあなたの出力から探しますか? – AKS

+0

@AKS - 1つのクエリですべてのテーブルに参加して条件を設定したいと思います。 –

答えて

0

ジャンゴでは、単純に次のように問い合わせることができます:

>>>from app.models import modelname1 
>>> q = modelname1.objects.get(id = 1) 
>>> m2 = q.modelname2 # In django 1.8 or later 
>>> m3 = m2.modelname3 
>>> m4 = m3.modelname4 
... And so on! 

しかし、私はので、データベースの打撃の多くのこの方法を提供していません。データベースアクセスを最適化したい場合は、次の記事を読んでください。 https://docs.djangoproject.com/en/1.9/topics/db/optimization/

+0

それは私の問題について同じ答えを得た方法です。私は答えを得るためにデータベースを何度も叩く必要があります。私が望むのは、データベースを一度押してから5つのテーブルをジョインし、それに条件をつけることだけです。あなたのお返事ありがとうございます! –

+0

あなたのウェルカム@Abz Rockersでは、この質問のステータスを、ダニを打つことで反応するように変更したり、好きな場合は+を回答に付けたりすることができます。 –

関連する問題