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

如何在Django中隐藏适配list_editable的list_display_links对应ID列

Django Admin 隐藏list_display_links指定的ID列解决方案

问题背景

定义如下Person模型:

# "store/models.py"
from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)

在Django Admin中配置字段可编辑时,编写了如下代码:

# "store/admin.py"
from django.contrib import admin
from .models import Person

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ("first_name", "last_name")
    list_editable = ("first_name", "last_name")

触发错误:

ERRORS: <class 'store.admin.PersonAdmin'>: (admin.E124) The value of 'list_editable[0]' refers to the first field in 'list_display' ('first_name'), which cannot be used unless 'list_display_links' is set.

添加id到list_display和list_display_links后错误解决,但列表页面多出不需要的ID列,需隐藏该列。

解决方案

方法1:自定义空字段作为链接目标

创建无内容的自定义字段作为list_display_links的目标,既满足Django的规则,又不会显示额外列:

# "store/admin.py"
from django.contrib import admin
from .models import Person

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ("first_name", "last_name", "_dummy_link")
    list_editable = ("first_name", "last_name")
    list_display_links = ("_dummy_link", )

    def _dummy_link(self, obj):
        return ""
    _dummy_link.short_description = ""
    _dummy_link.admin_order_field = None

此方案下,列表页面仅显示first_name和last_name可编辑列,点击行内空白区域仍能进入详情页。

方法2:通过CSS隐藏ID列

若不想修改Python逻辑,可通过自定义Admin CSS隐藏ID列:

  1. 在项目中创建admin/css/hide_id.css文件:
th.column-id, td.column-id {
    display: none;
}
  1. 在PersonAdmin中引入该CSS:
# "store/admin.py"
from django.contrib import admin
from .models import Person

@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
    list_display = ("first_name", "last_name", "id")
    list_editable = ("first_name", "last_name")
    list_display_links = ("id", )

    class Media:
        css = {
            'all': ('admin/css/hide_id.css',)
        }

需确保Django静态文件配置正确,能读取到该CSS文件。

方案对比

  • 方法1为纯Python实现,无需处理静态文件,简洁稳定,推荐使用。
  • 方法2适合临时快速隐藏列,但依赖Admin样式结构,若官方样式更新可能失效。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:55:34