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

如何在Django admin的ModelAdmin列表页隐藏而非禁用添加模型按钮

实现方案

你当前直接重写has_add_permission返回False的写法是全局禁用添加权限,所以所有涉及该模型添加操作的场景都会被限制。要实现仅列表页隐藏添加按钮、其他场景保留添加功能,只需要在权限判断中增加「当前请求是否为列表页请求」的校验逻辑即可。

适配Django 3.2+版本的代码如下:

@admin.register(Document)
class DocumentAdmin(admin.ModelAdmin):
    list_display = ("id", "name", "template", "file")
    fields = ["template", "name", "file"]

    def has_add_permission(self, request):
        # 先获取默认的添加权限判断结果
        original_perm = super().has_add_permission(request)
        # 若本身无添加权限直接返回,无需后续判断
        if not original_perm:
            return False
        # 构造当前模型列表页对应的视图名称
        changelist_view_name = f"admin:{self.opts.app_label}_{self.opts.model_name}_changelist"
        # 仅当当前请求为列表页请求时,返回无添加权限(隐藏添加按钮)
        if request.resolver_match.view_name == changelist_view_name:
            return False
        # 其他场景保留原有添加权限
        return original_perm

实现逻辑说明

  • Django Admin每个操作页面对应独立的视图名称,列表页对应视图名称格式为admin:{应用名}_{模型名}_changelist
  • 仅当匹配到列表页视图时,我们才会阻断添加权限的返回,其他场景(包括内联添加、关联字段添加弹窗、OneToOne关系绑定添加等)的请求不会命中该判断,会保留正常的添加功能
  • 该写法不会破坏Django原生的权限体系,原本就没有添加权限的用户依然无法执行添加操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:54:02