Django ORM - 涉及3个模型的ForeignKey

时间:2017-09-06 11:49:20

标签: django django-orm

我有以下型号:

class A(models.Model):
    ...

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

class C(models.Model):
    ...

我想得到任何有任何B的A,有任何C = null。 我试过做

A.objects.filter(b__c__isnull=True) 

但显然没有取得正确的结果。

我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

尝试使用a.b_set.filter(c__isnull=True),首先我们要求模型A,然后我们要求A中的对象B但是使用c == Null过滤

答案 1 :(得分:0)

如果您的问题是没有任何B的A来了,您可以试试吗

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

答案 2 :(得分: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()