2014-07-23 74 views
0

可以說你有以下型號:Django的查詢集遍歷(不評價)

class Connect: 
    a = models.ForeignKey(A) 
    b = models.ForeignKey(B) 

以連接模式AB(此表是必要的數據的目的,用於M2M領域是不夠的)

可以說我有一個名爲上面b_model

a_models = Connect.objects.filter(b=b_model) 

將是一個查詢具體型號B一套Connect對象。我想要一個A對象的QuerySet。以下將做到這一點:

a_models = [obj.a for obj in Connect.objects.filter(b=b_model)] 

但這將評估的QuerySet和創建一個列表。 我想創建一個尚未評估過的QuerySet,並且它的對象爲A。我怎樣才能做到這一點?

回答

2

如果你想有一個對象,從A

a_objs = A.objects.filter(connect__b=b_model) 
+0

謝謝,我剛回到Django一年後忘了我可以做到這一點。當我被允許時,我會接受 –

0

使用下面的代碼

class A(models.Model): 
    ... 
    b_models= models.ManyToManyField(B, through='Connect', through_fields=('a', 'b'), related_name='a_models') 

開始在AB可以定義ManyToManyField到其他模型(通過Connect)現在您可以使用

a_model.b_models # queryset of Bs 

而且

b_model.a_models # queryset of As 

而且你不會有直接查詢Connect模型。