2016-04-23 98 views
0

我仍在学习Django。任何熟悉Django 1.8或更高版本的人都可以帮助我解决这个问题。我在参加这5台的问题,我想执行一个查询,相当于这个SQL查询:在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 - 我想在一个查询中加入所有表格并且有条件。 –

回答

0

在Django中你可以简单的查询是这样的:

>>>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

这就是我对我的问题得到同样答案的方式。我必须多次访问数据库才能得到答案,我只需要通过点击一次数据库来加入五个表,然后在其上有一个条件。感谢您的答复! –

+0

欢迎您@Abz Rockers,您可以通过点击打勾来改变这个问题的状态,或者如果您愿意,可以给我一个答案+。 –