Django:如何获取所有员工用户的查询集?

Django: how do I get a queryset of all users that are staff?

Django:如何获取所有员工用户的查询集?

我正在尝试:

staff = User.objects.get(is_staff=True)

但出现类型错误:

'User' object is not iterable

使用 filter 代替 get

staff = User.objects.filter(is_staff=True)

get in a queryset是获取具体的对象值,不可迭代

user = User.objects.get(id=2)

它给你id为2的用户对象。只能有1个id为2的用户

但是在你的情况下,可以有很多用户具有员工身份

staff = User.objects.filter(is_staff=True)

这为您提供了工作人员列表。如果您要查找一个对象,则使用 get;如果要查找列表,则使用过滤器。

您现在可以像这样在您的模板中使用它

{% for stf in staff %}
    {{stf.username}}
{% endfor %} 

重点是在使用 staff = User.objects.get(is_staff=True) 时,您无法确定它是否会 return 单个用户(除非您确定)。

您可能想要添加更多条件以将选项缩小到一个。

一个更安全的选择是用户 filter,它 return 是符合条件的用户列表,当事情与预期不符时不需要异常处理 objects.get

get 用于返回单个对象 - 而不是查询集。如果它 returns 来自数据库的多个条目,它将给出一个错误。在您的情况下,我猜它返回的是单个用户,而您正在尝试对其进行迭代。

filter 是您要使用的。它 returns 一个可以迭代的查询集。

staff = User.objects.filter(is_staff=True)
for person in staff :
    do stuff....