gpt4 book ai didi

python - 如何检索所有用户名以及每个用户的 bool 标志以指示他们对组的成员身份?

转载 作者:行者123 更新时间:2023-11-28 22:11:19 25 4
gpt4 key购买 nike

我正在尝试构建一个页面,允许管理员用户为每个用户切换到特定组的成员身份。我的目标是使用 AJAX 功能来做到这一点。我正在使用 Django 2.2。

我已经实现了一个返回系统中所有用户的 AJAX 调用——这个数据填充了一个 data table .下一步是在每个用户旁边有一个复选框,表明他们是某个组的成员。

我在 View 中使用下面的代码来检索用户。

users = list(GeminiUser.objects.filter(is_active=1).values('email'))

我希望用户查询结果包含每个用户的 bool 字段,表明他们属于特定组。我怎样才能做到这一点?

感谢任何指导。

最佳答案

我们可以使用子查询Exists [Django-doc] 来做到这一点:

from django.db.models import Exists, OuterRef

in_group = Group.objects.filter(
pk=<i>mygroup.pk</i>,
user=OuterRef('pk')
)

my_users = User.objects.annotate(in_group=Exists(in_group))

mygroup.pk 作为您要检查其成员资格的组的主键。

此查询集包含具有额外属性 in_groupUser 对象,如果用户属于组,则为 True,为 False 否则。

例如:

>>> from django.contrib.auth.models import Group, User
>>> mygroup = Group.objects.first()
>>> from django.db.models import Exists, OuterRef
>>>
>>> in_group = Group.objects.filter(
... pk=mygroup.pk,
... user=OuterRef('pk')
... )
>>>
>>> my_users = User.objects.annotate(in_group=Exists(in_group))
>>> my_users
<QuerySet [<User: >, <User: test>]>
>>> [u.in_group for u in my_users]
[True, False]

您还可以对查询集执行额外的过滤,例如仅显示活跃用户等。

关于序列化,请使用序列化器 [Django REST framework doc] [Django-doc] .根本不推荐使用 .values()。通过分离查询和表示,您可以更轻松地扩展、更新等您的 REST View 。

关于python - 如何检索所有用户名以及每个用户的 bool 标志以指示他们对组的成员身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809278/

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