当前位置: 首页 > 面试题库 >

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

郎弘业
2023-03-14
问题内容

我正在尝试将具有对用户表的外键的表单域的查询集缩小到用户所属的组。

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

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的约定来跨关系连接以连接到查询集中的组表。

首先,我建议给您的关系a 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


 类似资料:
  • 问题内容: 我正在尝试根据的特定字段的值过滤Django中的表。 例如,我有两个模型: 我想根据相关项目的名称过滤我的资产列表。 目前,我正在执行两个查询: 我想知道是否有一种方法可以在主查询中指定这种过滤? 问题答案:

  • 问题内容: 如果我有一个对象数组,并且想将Angular模型绑定到基于过滤器的元素之一的属性,该怎么做?我可以用一个具体的例子更好地解释: HTML: 控制器: JSBin:http://jsbin.com/adisax/1/edit 我想将第二个输入过滤为具有’C’等级的主题,但是我不想将模型绑定到该 等级 ;我想将其绑定到等级为“ C”的主题的 标题 。 这可能吗?如果可以,怎么做? 问题答案

  • 问题内容: 天是用户输入以获得比(用户输入的天数)还早的结果的数字。例如,如果用户输入32天,则他们将获得30天之前的结果。 快速试用: 我的问题和尝试 来自输入字段的输入 在我的情况下,在Django中执行此操作的最佳方法是什么? 问题答案: 这样的事情将为你工作:

  • 问题内容: 考虑简单的Django模型和: 使用参与者总数来注释事件查询很容易: 如何用筛选的参与者计数进行注释? 我需要查询所有事件,而与参与者人数无关,例如,我不需要按带注释的结果进行过滤。如果有参与者,那没关系,我只需要带有0注释的值即可。 文档中的示例在这里不起作用,因为它从查询中排除了对象,而不是使用注释了对象0。 更新。Django 1.8具有新的条件表达式功能,因此我们现在可以像这样

  • 本文向大家介绍MongoDB文档中如何过滤特定值,包括了MongoDB文档中如何过滤特定值的使用技巧和注意事项,需要的朋友参考一下 要过滤特定值,请在MongoDB中使用$filter。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是要过滤的查询- 这将产生以下输出-

  • 问题内容: 在Django模型QuerySets中,我看到比较值存在和,但是存在(不等于?)。 我想使用不等于过滤掉: 例: 我想要 在不正确的语法。我试过。 我最终使用: 问题答案: 也许Q对象可以帮助解决此问题。我从未使用过它们,但似乎可以将它们取反并组合起来,就像普通的python表达式一样。 更新:我只是尝试了一下,它似乎工作得很好: