2012-06-08 76 views
0

我有以下模型。更好的处理Django查询的方法

class Model1(models.Model): 
    name = models.CharField() 

class Model2(models.Model): 
    name = models.CharField() 
    model1 = models.ForeignKey(model1) 

class Model3(models.Model): 
    name = models.CharField() 
    model2 = models.ForeignKey(model2) 
    flag = models.BooleanField(blank=False) 

所以我的显示器应该是这样的,列表页面上Model2.nameModel1.name。 条件是:我应该只显示Model2情况下,其中至少有一个Model3.flag = True

所以现在我得到的所有在列表中的Model2对象和迭代Model3。 我无法正确使用select_related()作为模型。 任何人都可以帮忙。

谢谢。

+0

为什么你不能够 “正确使用select_related()”?看起来像这里最好的方式。 – DrTyrsa

+0

请按编辑建议改进您的代码。 – okm

回答

1

喜欢的东西:

qs = Model2.objects.filter(model3__flag=True).select_related('model1').distinct() 
for m2 in qs: 
    print m2.model1.name, m2.name 

# only fetch the names, 
# this works if you treat duplicated ('name', 'model1__name') tuples same and show them once. 
qs = qs.values('model1__name', 'name') 
for x in qs: 
    print x['model1__name'], x['name'] 
+0

可能有重复。 – DrTyrsa

+0

@DTTyrsa是的,谢谢! – okm