【问题标题】:Django: how do I get a queryset of all users that are staff?Django:我如何获得所有员工用户的查询集?
【发布时间】:2015-11-19 23:04:45
【问题描述】:

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

我正在尝试:

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

但得到一个 TypeError:

'User' object is not iterable

【问题讨论】:

    标签: python django django-queryset django-orm


    【解决方案1】:

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

    过滤器是您想要使用的。它返回一个可以迭代的查询集。

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

    【讨论】:

      【解决方案2】:

      关键是在使用 staff = User.objects.get(is_staff=True) 时,您不能确定它会返回单个用户(除非您确定)。

      您可能希望添加更多条件以将选项范围缩小到一个。

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

      【讨论】:

        【解决方案3】:

        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 %} 
        

        【讨论】:

          【解决方案4】:

          使用filter 代替get

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

          【讨论】:

            猜你喜欢
            • 2021-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-06
            • 2013-03-14
            • 1970-01-01
            相关资源
            最近更新 更多