使用已过滤的相关对象的计数来注释查询集

时间:2016-06-16 14:30:40

标签: django django-1.8

在我的django应用程序(1.8)中,我有一个模型TeamMember,它有一个布尔字段primary_contact和一个与User的外键关系。我想找到一组没有相关TeamMemberprimary_contact=True的用户对象。 (TeamMembers primary_contact=False很好)

我可以轻松地获得团队成员的数量:

User.objects.annotate(teammember__count=Count('teammember'))

我也可以轻松预取primary_contact TeamMembers:

User.objects.prefetch_related(Prefetch('teammember_set', queryset=.objects.filter(primary_contact=True), to_attr='primary_contacts'))

但是,我还没有找到允许我通过“没有primary_contact团队成员的用户”过滤查询集的咒语。

显然,我想在ORM中执行此操作,最大限度地减少查询,并且尽可能不使用原始SQL。

1 个答案:

答案 0 :(得分:1)

我可能会误解你的问题,但这会有效吗?

User.objects.filter(Q(teammember__primary_contact=False) |
                    Q(teammember__isnull=True))