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

Django渲染formset表格时设置首行标签、列宽及序号列的实现问题

代码调整方案

1. 修改模板文件 linprog.html 代码

替换原有table部分的代码如下:

<table>
    {{ formset.management_form }}
    <!-- 表头部分,对应需求1:打印字段标签到第一行 -->
    <thead>
        <tr>
            <th style="width:45px;">V</th>
            {% for field in formset.empty_form %}
                <!-- 按需求设置对应对齐方式 -->
                {% if field.name == 'x1' %}
                <th style="width:45px;text-align:left;">{{ field.label }}</th>
                {% elif field.name == 'x2' or field.name == 'direct' %}
                <th style="width:45px;text-align:center;">{{ field.label }}</th>
                {% elif field.name == 'rhs' %}
                <th style="width:45px;text-align:right;">{{ field.label }}</th>
                {% endif %}
            {% endfor %}
        </tr>
    </thead>
    <tbody>
        {% for form in formset %}
        <tr>
            <!-- 序号列,对应需求3:生成C1、C2...格式的序号 -->
            <td style="width:45px;">C{{ forloop.counter }}</td>
            {% for field in form %}
                <!-- 宽度统一设置为45px,对应需求2,同时设置对应对齐方式 -->
                {% if field.name == 'x1' %}
                <td style="width:45px;text-align:left;">{{ field }}</td>
                {% elif field.name == 'x2' or field.name == 'direct' %}
                <td style="width:45px;text-align:center;">{{ field }}
                    <!-- 原有针对direct字段的逻辑可放在此处 -->
                </td>
                {% elif field.name == 'rhs' %}
                <td style="width:45px;text-align:right;">{{ field }}</td>
                {% endif %}
            {% endfor %}
        </tr>
        {% endfor %}
    </tbody>
</table>

代码说明:

  • 新增<thead>标签渲染表头,通过formset.empty_form获取表单字段的标签,实现字段标签在第一行展示的需求
  • 所有单元格的width属性统一设置为45px,满足字段宽度要求
  • 通过forloop.counter获取当前行的循环序号,拼接前缀C生成指定格式的序号列
  • 新增formset.management_form是Django formset的必填内容,避免表单提交时出错
  • 你原有针对direct字段的特殊处理逻辑,可直接放在对应字段的判断分支中

2. 修改forms.py代码(可选,匹配预期表头的RHS大写格式)

class linprog_vars(forms.Form):
    x1 = forms.FloatField(label='x1')
    x2 = forms.FloatField(label='x2')
    direct = forms.CharField(label='direct')
    rhs = forms.FloatField(label='RHS')

这里仅修改了rhs字段的label为大写RHS,和你提供的预期效果表头保持一致,不需要可以不调整。

3. views.py无需修改

原有逻辑可以正常运行,无需额外调整。

内容的提问来源于stack exchange,提问作者Andrey Vinajera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:36:03