除非输入搜索查询,否则隐藏 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 不会显示未过滤的结果

Linq 2 Sql - 除非在控制器内完成查询,否则存储库不起作用

Android:隐藏屏幕顶部边缘的视图