Django admin中list_display与list_editable冲突问题求助
Django Admin 三个核心列表属性的正确用法及冲突解决
先明确三个属性的作用
list_display:定义admin列表页要展示的字段集合,必须包含至少一个字段。list_editable:指定列表页中可直接编辑的字段(会显示为表单控件),不能包含list_display_links中的字段,也不能是模型主键。list_display_links:指定列表页中作为跳转详情页的链接字段,默认是list_display的第一个字段;手动设置时,必须是list_display内的字段,且不能与list_editable字段重叠。
你的错误原因分析
- admin.E124错误:你把
list_editable设为['title', 'main_txt'],这两个是list_display的前两个字段,默认的list_display_links是第一个字段(title),但你把它设为了可编辑字段,导致列表页没有任何可跳转的链接字段。Django要求列表页必须至少保留一个可点击的链接字段。 - admin.E123错误:你把
title和main_txt同时加入list_editable和list_display_links,这两个属性的字段必须完全互斥——可编辑的字段不能作为跳转链接,反之亦然。
正确配置示例
方案一:用日期字段作为跳转链接
class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'main_txt', 'date_of_publication'] list_editable = ['title', 'main_txt'] list_display_links = ['date_of_publication']
这样列表页中date_of_publication是跳转详情页的链接,title和main_txt可以直接编辑。
方案二:保留标题作为跳转链接,仅编辑正文
class ArticleAdmin(admin.ModelAdmin): list_display = ['title', 'main_txt', 'date_of_publication'] list_editable = ['main_txt'] # 这里可以不写list_display_links,默认第一个字段title就是链接;也可以手动指定 list_display_links = ['title']
核心规则总结
list_display_links的字段必须存在于list_display中,且不能出现在list_editable里。list_editable的字段必须存在于list_display中,且不能是list_display_links的字段。- 列表页必须至少有一个
list_display_links字段(默认第一个字段,或手动指定),否则触发admin.E124。
内容的提问来源于stack exchange,提问作者Random
相关产品推荐
相关产品推荐

