Django:重写用户queryset以从公共中筛选出管理员/职员用户?

2024-04-19 12:08:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想过滤user manager self.get\u queryset()方法,使客户端应用程序上的用户在搜索或查看其他帐户时看不到管理员和职员用户。我遇到的问题是,如果我完全覆盖get\u queryset,我就无法使用身份验证系统登录。我当前的设置是:

class AccountManager(BaseUserManager):
    def get_public_queryset(self):
        return self.get_queryset().filter(active=True, verified=True, admin=False, staff=False)



如果我在管理器中定义了各种排序方法(因为我可以简单地调用该方法),那么使用这种设计可以很好地工作,但是似乎应该有更好的方法来实现这一点。有什么想法吗


Tags: 方法用户self身份验证falsetrue应用程序客户端
1条回答
网友
1楼 · 发布于 2024-04-19 12:08:18

我认为附加方法是一个很好的解决方案,但如果您坚持使用get\u queryset方法,则可以重写该方法并保留基本功能。我会这样做:

...
def get_queryset(self, *a, **kw):
    queryset = super().get_queryset(*a, **kw)
    # filter your queryset here as you wish
    queryset = queryset.filter(active=True, verified=True, admin=False, staff=False)
    return queryset
...

正如我在问题文本中看到的,您试图调用self.get\queryset(),这将是递归调用(而不是超类实现调用),这将最终导致最大递归深度超出错误

希望有帮助

相关问题 更多 >