2012-06-08 16 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