Django queryset排除空外键集

时间:2015-08-20 18:46:27

标签: django

我有以下模型,其中B与A具有多对一关系:

class A(model.Model):

    name = models.IntegerField()

class B(models.Model

    a = models.ForeignKey(A, db_column='a_id')

当我在A上使用查询集时,有没有办法排除A中没有B行的行?

3 个答案:

答案 0 :(得分:18)

使用isnull

A.objects.filter(b__isnull=False).distinct()

使用distinct()可以防止重复的条目,否则每个a对于链接到它的每个b都会出现一次。

答案 1 :(得分:1)

no_rows_in_b = B.objects.all().select_related('a')

将为您提供A&#39的所有B

然后你可以循环浏览它们并输出A

如果你想要不重复:

no_rows_in_b = B.objects.all().distinct('a').select_related('a')

然后:

for rec in no_rows_in_b:
    print(rec.a)

答案 2 :(得分:0)

请注意,如果您想更明确,可以执行以下操作:

A.objects.exclude(b__isnull=True).distinct()

使用exclude代替filter并使用True布尔arg。