gpt4 book ai didi

python - Django ORM Annotate bool 字段定义了团队的用户成员

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:29 25 4
gpt4 key购买 nike

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)

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

我想注释新字段( bool 值),它告诉您是分配给群组中某个团队的用户,例如:

User.objects.filter(
members__cohort=cohort
).annotate(
is_team_member=...
)
<小时/>

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

最佳答案

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

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)

关于python - Django ORM Annotate bool 字段定义了团队的用户成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47663027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com