You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django CMS Admin中过滤排除指定对象?

Django CMS Admin 屏蔽特定对象的最优实现方式

最直接且彻底的实现方式是重写Admin类的get_queryset方法,通过exclude过滤掉你不想返回的对象,这比自定义列表过滤器更可靠——它会在所有Admin操作场景(列表页、详情页、编辑页等)生效,彻底屏蔽目标对象。

基础实现示例

from django.contrib import admin
from .models import MyModule

class MyModuleAdmin(admin.ModelAdmin):
    list_display = ['name']

    def get_queryset(self, request):
        # 先获取默认的查询集
        queryset = super().get_queryset(request)
        # 排除特定名称的对象(如果是关联字段,用my_module__name这样的关联语法)
        return queryset.exclude(name='moduleidontwant')

动态过滤(可选)

如果需要根据用户权限或其他条件动态决定是否屏蔽对象,可以在方法中添加判断逻辑:

def get_queryset(self, request):
    queryset = super().get_queryset(request)
    # 仅对非超级管理员隐藏该对象
    if not request.user.is_superuser:
        queryset = queryset.exclude(name='moduleidontwant')
    return queryset

注:你尝试的list_filter写法不符合Django语法规范,Django的列表过滤器需要使用内置或自定义过滤器类,而非直接写排除条件。如果仅需在列表页展示时过滤,也可以自定义过滤器,但这种方式无法阻止用户通过URL直接访问该对象的详情页,因此重写get_queryset是最优方案。

内容的提问来源于stack exchange,提问作者David A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:55:18