除非输入搜索查询,否则隐藏 Django admin 中的所有记录[关闭]
Posted
技术标签:
【中文标题】除非输入搜索查询,否则隐藏 Django admin 中的所有记录[关闭]【英文标题】:Hide all records in Django admin unless a search query is entered [closed] 【发布时间】:2021-10-23 18:41:20 【问题描述】:我们有一个 Python-2.7 和 Django 项目(1.11 版),其中注册了许多模型(用户应用程序、邀请应用程序、个人资料应用程序等...)
我要做的第一件事是为一些用户创建一个组,当他们登录到 Django 管理员并从整个列表中查看有限的模型时,这些用户只有“查看”权限。也就是说,这些用户应该只能浏览我为其组指定的模型中的记录。
第二件事是当您输入允许查看的模型之一时,默认情况下不显示任何记录。您必须搜索某些内容才能显示匹配的记录,以便仅显示与该用户关联的结果。这可能吗?如果可以,我该如何实现?
【问题讨论】:
【参考方案1】:覆盖模型管理员的get_queryset
并检查查询参数:
from django.contrib import admin
@admin.register(MyModel)
class CustomAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super().get_queryset(request)
if not self.get_preserved_filters(request):
return qs.none()
return qs
【讨论】:
我如何确保仅将其应用于特定的用户组? 在检查中包含request.user
。某事。就像and request.users.groups.filter(name="group_name").exists()
应该做的那样。以上是关于除非输入搜索查询,否则隐藏 Django admin 中的所有记录[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
除非我添加溢出,否则 CSS 背景颜色不会显示:隐藏?为啥?
除非选中,否则带有 BooleanField 的 Django 表单始终无效
使用 postgres 在 Django 中高效存储 Json
除非我在搜索栏中点击,否则 SearchController 不会显示未过滤的结果