![](/img/trans.png)
[英]Django Custom User Manager is not called when registering users on the admin panel
[英]Django custom manager return everything when user is on admin page
我正在創建Django應用。 這是一個文章應用程序。 我有一個名為hidden
的字段,當hidden
為true 且用戶不在管理面板中時,我想返回一個沒有文章的查詢集。
管理員頁面->顯示所有內容
普通搜索->僅在hidden
= False時顯示
我的“常規搜索”是我進行的自定義搜索。 我正在用django-filter過濾結果,我想自動過濾掉隱藏的文章。
我正在使用自定義管理器創建此文件:
class ArticleManager(models.Manager):
def get_queryset(self, request):
if request.user.is_superuser:
return super().get_queryset()
return super().get_queryset().filter(hidden=False)
但我剛得到這個錯誤:
TypeError: get_queryset() missing 1 required positional argument: 'request'
通常,沒有request
實例將傳遞給管理器方法。 但是您可以使用其get_queryset()
方法來自定義管理員內部使用的get_queryset()
:
class ArticleAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(hidden=False)
請注意,此查詢集也將用於編輯實例,因此您可以真正限制某些用戶可以訪問哪些對象。
基於更新的問題:您不應重新定義模型管理器的get_queryset
函數簽名以接受request
參數。 相反,您需要使用user
參數創建一個新的管理器函數,該函數僅返回所需的項目。 然后,您將使用它作為queryset
到過濾器。
例如:
class ArticleManager(models.Manager):
def get_visible_items(self, user):
if user.is_superuser:
return super().get_queryset()
return super().get_queryset().filter(hidden=False)
# In your view:
user = request.user
artice_filter = ArticleFilter(queryset=Article.objects.get_visible_items(user))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.