Django ORM获取未分配给团队的用户

时间:2017-12-05 15:13:29

标签: python django django-orm

models.py

from django.db import models


class UserGroup(models.Model):
    members = models.ManyToManyField(User, related_name='members', through='UserGroupMember')


class UserGroupMember(models.Model):
    user = models.ForeignKey(User)
    usergroup = models.ForeignKey(UserGroup)


class Cohort(models.Model):
    user_groups = models.ManyToManyField(UserGroup)


class Team(models.Model):
    cohort = models.ForeignKey(Cohort)
    members = models.ManyToManyField(User, related_name='team_members', through='TeamMembers', blank=True)


class TeamMembers(models.Model):
    team = models.ForeignKey(Team)
    user = models.ForeignKey(User)

单个用户只能属于同一个群组中的一个团队。

查询#1

我需要编写查询以获取未分配给任何团队的给定同类群组的用户。

我试过了:

User.objects.filter(
    members__cohort=cohort
).filter(
    team_members__isnull=True
)

但是,如果他是另一个队列的团队成员,则不会给我这个用​​户。

查询#2

我想要注释新字段(布尔值),它告诉您分配给同类群组中某个团队的用户,如:

User.objects.filter(
    members__cohort=cohort
).annotate(
    is_team_member=...
)

我正在使用Python 2.7.13和Django 1.9.8。感谢。

1 个答案:

答案 0 :(得分:1)

尝试通过排除 分配给队列中的团队的所有成员来构建查询集:

User.objects.filter(
    members_cohort=cohort,
).exclude(
    team_members__cohort=cohort,
)