如何调整Django Admin列宽并设置自定义列可编辑?
Django Admin 列宽调整与自定义列可编辑问题解决
一、自定义列无法加入list_editable的原因及解决办法
你遇到的错误核心原因是:list_editable仅支持绑定模型的实际数据库字段,而nome_short_oficina是你在Admin中定义的自定义方法列,不属于数据库字段范畴,直接添加自然会报错。
要实现对应内容的可编辑,最优方案是直接关联模型的oficina字段:
class YourModelAdmin(admin.ModelAdmin): list_display = ['nome_short_oficina', ...] # 保留自定义列用于格式化显示 list_editable = ['oficina', ...] # 将模型字段加入可编辑列表 # 保留你的自定义方法 def nome_short_oficina(self): return u"%s" % self.oficina nome_short_oficina.short_description = _(u"Oficina") nome_short_oficina.allow_tags = True
这样既可以在列表页展示自定义格式的内容,又能通过实际字段实现编辑功能。
如果确实需要基于自定义逻辑实现编辑(比如特殊格式校验),可以通过自定义Admin表单或结合readonly_fields重写保存方法,但这种场景需求较少,优先推荐上述方案。
二、调整Django Admin列宽的两种方法
方法1:通过Media类注入全局自定义CSS
在你的ModelAdmin类中添加Media配置,引入自定义样式文件:
class YourModelAdmin(admin.ModelAdmin): # 其他Admin配置... class Media: css = { 'all': ('css/custom_admin.css',) }
然后在项目static/css/custom_admin.css文件中添加列宽样式:
/* 列的类名格式为column-<列的short_description或字段名>,替换成你的目标列名称 */ .column-Oficina { width: 220px; }
方法2:在自定义列中直接嵌入行内样式
如果仅需调整单个自定义列的宽度,可在返回内容中加入行内样式,记得用mark_safe确保HTML内容安全:
from django.utils.safestring import mark_safe def nome_short_oficina(self): return mark_safe(f'<div style="width:220px;">{self.oficina}</div>') nome_short_oficina.short_description = _(u"Oficina") nome_short_oficina.allow_tags = True
内容的提问来源于stack exchange,提问作者Fabio Carvalho
相关产品推荐
相关产品推荐

