【问题标题】:Get users who belong to groups获取属于组的用户
【发布时间】:2020-02-24 13:16:03
【问题描述】:

我正在尝试获取群组 Creator 和群组 Teacher 中的用户的查询集。

test.py 我发送要过滤的组数组:

def test_admin_create_authenticated(self):
    data = {"data": {"alert_type":"system", "text": "UnitTest"}, "filters":{"groups":['Teacher', 'Creator'], "together": True}}
    url = reverse('admin_alerts-list')
    response = self.client.post(url, json.dumps(data), content_type="application/json")
    self.assertEqual(response.status_code, status.HTTP_200_OK)

views.py:在这里我想创建一个 q_objects,它将按名称过滤组:

if 'groups' in filters:
    print(filters['groups'])
    try: 
        for group in filters['groups']:
            q_objects.add(Q(groups__name=group), variable)
    except:
        q_objects.add(Q(groups=filters['groups']), variable)

然后找到这些组中的所有用户:

print(q_objects)
users = User.objects.filter(q_objects)
print(users.query)
print(users)

终端:

['Teacher', 'Creator']
(AND: ('groups__name', 'Teacher'), ('groups__name', 'Creator'))
SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" INNER JOIN "auth_user_groups" ON ("auth_user"."id" = "auth_user_groups"."user_id") INNER JOIN "auth_group" ON ("auth_user_groups"."group_id" = "auth_group"."id") WHERE ("auth_group"."name" = Teacher AND "auth_group"."name" = Creator)
<QuerySet []>

为什么我的 q_objects 不起作用?我有一个用户属于这 2 个组。

【问题讨论】:

  • 您在组中同时查询名称为TeacherCreator 的老师。任何组都不能有一个同时包含两个事物的名称。

标签: python django django-q


【解决方案1】:

您正在过滤同时属于 a 组的用户,该组名为 'Teacher''Creator'。而那应该是两个(不同的)组。

您应该通过在此处“链接”.filter(..) 调用来进行过滤:

users = User.objects.all()

for group in filters.get('groups', ()):
    users = users.filter(groups__name=group)

在此for 循环的末尾,users 包含属于filters['groups'] 中所有组的User

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多