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

如何调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:00:57