如何为Django admin计算字段的关联标签设置自定义样式
Django Admin 计算字段标签自定义样式实现
给字段值添加完样式后,要给对应表头标签加样式有两种可直接落地的方案:
方案1:硬编码样式(最快,无需额外文件)
@admin.display的description参数本身支持传入经format_html处理的HTML内容,不需要重写模板或者后台方法,直接修改现有代码的装饰器参数即可:
from django.contrib import admin from django.utils.html import format_html from django.utils import formats @property @admin.display( # 直接在这里给标签写入需要的样式 description=format_html('<span style="color: red; font-weight: bold;">Total Cash</span>') ) def bar_total_cash(self): return format_html('<span style="color: red; font-weight: bold;">{}</span>', formats.localize( round( self.bar_cash_initial + self.bar_cash_dop + self.bar_cash_usd * self.usd_dop_rate + self.bar_cash_eur * self.eur_dop_rate + self.bar_cash_propina - self.bar_credit, 2 ), use_l10n=True ) )
注意:不要直接传入裸HTML字符串,必须用
format_html包裹,否则Django会自动转义标签,把HTML代码当普通文本显示。
方案2:自定义CSS(推荐,易维护)
如果样式规则比较复杂,或者后续要调整样式不想修改Python代码,可以利用Django admin自动生成的表头类名来加样式:
Django admin会给每个列表头自动生成column-<字段名>的CSS类,这个计算字段对应的表头类名就是column-bar_total_cash,直接给这个类写样式即可。
操作步骤:
- 在对应app的静态文件目录下新建后台自定义样式文件,路径为
static/css/admin_custom.css,写入样式规则:
th.column-bar_total_cash { color: red; font-weight: bold; }
- 在对应模型的ModelAdmin中引入这个CSS文件:
@admin.register(BarModel) # 替换成你自己的模型名 class BarModelAdmin(admin.ModelAdmin): # 你原有的配置,确保list_display中包含bar_total_cash字段 list_display = [..., 'bar_total_cash', ...] class Media: css = { 'all': ('css/admin_custom.css',) }
这种方式把样式和Python逻辑解耦,后续改颜色、加字体、加交互效果都直接改CSS就行,不需要动业务代码。
内容的提问来源于stack exchange,提问作者novice_cplusplus
相关产品推荐
相关产品推荐

