gpt4 book ai didi

python - Django:如何过滤属于特定组的用户

转载 作者:IT老高 更新时间:2023-10-28 22:02:28 25 4
gpt4 key购买 nike

我希望将具有用户表外键的表单字段的查询集缩小到用户所属的组。

这些组之前已由我关联。该模型可能具有以下内容:

myuser = models.ForeignKey(User)

而且我的 ModelForm 非常简单:

class MyForm(ModelForm):
class Meta:
model = MyModel

因此,当我实例化表单时,我会在 views.py 中执行类似的操作:

form = MyForm()

现在我的问题是,如何获取 myuser 字段并对其进行过滤,以便仅显示组 'foo' 的用户.. 类似于:

form.fields["myuser"].queryset = ???

SQL 中的查询如下所示:

mysql> SELECT * from auth_user INNER JOIN auth_user_groups ON auth_user.id = auth_user_groups.user_id INNER JOIN auth_group ON auth_group.id = auth_user_groups.group_id WHERE auth_group.name = 'client';

不过,我想避免使用原始 SQL。有可能吗?

最佳答案

你会想要使用 Django's convention for joining across relationships加入查询集中的组表。

首先,我建议给你的关系一个related_name。这使得代码比 Django 默认生成的代码更具可读性。

class Group(models.Model):
myuser = models.ForeignKey(User, related_name='groups')

如果您只想要一个组,您可以跨该关系加入并使用以下任一方法比较名称字段:

form.fields['myuser'].queryset = User.objects.filter(
groups__name='foo')
form.fields['myuser'].queryset = User.objects.filter(
groups__name__in=['foo'])

如果要限定多个组,请使用 in 子句:

form.fields['myuser'].queryset = User.objects.filter(
groups__name__in=['foo', 'bar'])

如果你想快速查看生成的SQL,可以这样做:

qs = User.objects.filter(groups__name='foo')
print qs.query

关于python - Django:如何过滤属于特定组的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1810891/

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