Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ORM注释布尔字段,用于定义团队的用户成员_Python_Django_Django Orm - Fatal编程技术网

Python Django ORM注释布尔字段,用于定义团队的用户成员

Python Django ORM注释布尔字段,用于定义团队的用户成员,python,django,django-orm,Python,Django,Django Orm,型号.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

型号.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)
单个用户只能是队列中一个团队的一部分

我想注释新字段(布尔值),它告诉您是分配给队列中某个团队的用户,类似于:

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


我使用的是Python 2.7.13和Django 1.9.8。谢谢。

我通过加入
队列
模型并使用条件表达式成功地解决了这个问题:

from django.db.models import Case, When, Value, IntegerField


users = User.objects.filter(
    members__cohort=cohort
).annotate(
    is_team_member=Case(When(team_members__cohort=cohort, then=Value(1)), default=0, output_field=IntegerField())
)
现在,我可以轻松筛选,例如,属于某个团队的用户:

users.filter(is_team_member=1)