2017-09-06 23 views
0

我有以下型號:Django的ORM - ForeignKey的3個型號參與

class A(models.Model): 
    ... 

class B(models.Model): 
    a = models.ForeignKey(A) 
    c = models.ForeignKey(C, null=True, blank=True) 

class C(models.Model): 
    ... 

我想獲得全A的具有任意B,有任何C = NULL。 我曾嘗試做

A.objects.filter(b__c__isnull=True) 

但這顯然不是獲取正確的結果。

我錯過了什麼嗎?

+0

ForeignKey需要引用模型字段,而不是模型類(因爲您擁有它)。如果這只是僞代碼,您應該發佈您的模型並描述您的查詢沒有獲取正確結果的原因。 – YPCrumble

回答

1

a.b_set.filter(c__isnull=True)嘗試,首先我們要求模型A,然後我們要求A內的對象B但用c過濾。== NULL

0

如果你的問題是,A公司沒有任何B的來了,可以嘗試

A.objects.filter(b__isnull=False, b__c__isnull=True).distinct() 
0

你需要在這裏做一個反向查找第一

b_with_c_null = b.objects.filter(c__is_null=True).all() 
a_with_any_b_with_c_null = b_with_c_null.a_set.all()