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

如何重写Django的change_list_results.html为管理后台列表新增额外列

enter image description here

实现新增列的修改方案

分两种实现方案,优先推荐无需修改模板的轻量方案,确有高度定制需求再使用模板修改方案。

方案1:无需修改模板(推荐)

绝大多数自定义列的需求不需要重写模板,直接在对应ModelAdmin类中配置即可:

  • 在list_display属性中添加自定义列的标识
  • 编写对应自定义列的渲染方法,可自定义表头名称
    示例代码:
from django.contrib import admin
from .models import 你要管理的模型类

class 你的模型管理类(admin.ModelAdmin):
    # 原有字段后追加自定义列名
    list_display = ('原有字段1', '原有字段2', '自定义列标识')

    # 编写自定义列的渲染逻辑
    def 自定义列标识(self, obj):
        # obj为当前行的模型实例,可直接调用所有字段和自定义方法
        return f"自定义内容:{obj.对应字段名}"
    # 配置自定义列的表头显示文字
    自定义列标识.short_description = "自定义表头"

admin.site.register(你要管理的模型类, 你的模型管理类)

方案2:修改change_list_results.html模板

如果需要做高度自定义的渲染,再修改模板,核心修改点如下:

  • 调整错误提示行的colspan值,新增几列就给原有的result|length加几,比如新增1列就用add:1过滤器
  • 在行渲染的位置新增对应<td>标签放自定义内容,放在for item in result前就是第一列,放在后面就是最后一列
  • 同步修改模板中thead部分的表头,新增对应的<th>标签,保证列数对齐
    修改后的tbody代码示例(以新增1列放在最前面为例):
<tbody>
{% for result in results %}
{% if result.form and result.form.non_field_errors %}
    <!-- 新增1列,所以colspan加1 -->
    <tr><td colspan="{{ result|length|add:1 }}">{{ result.form.non_field_errors }}</td> </tr>
{% endif %}
<tr>
  <!-- 新增自定义列 -->
  <td>
    <!-- 可通过result.instance获取当前行的模型实例 -->
    自定义内容:{{ result.instance.你要调用的字段 }}
  </td>
  {% for item in result %}
    {{ item }}
  {% endfor %}
</tr>
{% endfor %}
</tbody>

内容的提问来源于stack exchange,提问作者Atif Shafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:06:03