簡體   English   中英

Django:覆蓋用戶查詢集以從公眾中過濾掉管理員/員工用戶?

[英]Django: Override user queryset to filter out admin/staff users from the public?

我想過濾用戶管理器 self.get_queryset() 方法,使客戶端應用程序上的用戶在搜索或查看其他帳戶時看不到管理員和員工用戶。 我遇到的問題是,如果我完全覆蓋 get_queryset,我將無法使用我的身份驗證系統登錄。 我目前的設置是:

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



如果我在管理器中定義各種排序方法(因為我可以簡單地調用該方法),使用這種設計效果很好,但似乎應該有更好的方法來做到這一點。 有任何想法嗎?

我認為您已經實施的其他方法是一個很好的解決方案,但是如果您堅持使用 get_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() 這將是遞歸調用(不是超級 class 實現調用),這最終會導致最大遞歸深度超出錯誤。

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM