我有一个名为article
的应用程序。我想用hidden = True
隐藏文章。除管理员外,所有隐藏的文章均不可找到。
我正在使用自定义管理器,并且正在使用自定义Modeladmin。
我的自定义模型管理员:
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)
我的自定义经理:
class ArticleManager(models.Manager):
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(hidden=False)
当我使用hidden = False
时,我想使用Article.objects.all()
来获取所有文章,并且在管理面板中时,我也想使用hidden = True
来获取文章。
管理面板->所有文章
Article.objects.all()->所有带有hidden = False
工作原理:
当我使用Article.objects.all()时,我得到的所有文章都带有hidden = False
什么不起作用:
在管理控制台上时,看不到任何带有hidden = True
的文章。
仅在管理面板中带有hidden = True
的文章应该可见。在Sitemaps的Querysets中,不应返回它们。
答案 0 :(得分:0)
首先,更好的做法是将QuerySet定义为自定义内部类,然后将其传递给管理器。然后,您有各种选择-您可以定义两个查询集并为管理员使用一个特定的查询集,也可以在完成后直接在经理类中进行用户权限检查,例如,回答此问题。然后,您只需使用wanted_text = "python-1u222-ea-str-b08"
test = "python-1u222-ea-str-b08-10_dec_2018.zip"
if wanted_text in test:
print("Hurray")
else:
print("doesn't match")
,它将为不同的用户返回不同的结果。
Custom QuerySet and Manager without breaking DRY?
希望这会有所帮助^^