Django Forms 手动格式化

Django Forms Manual Formatting

我在格式化 Django Formset 时遇到问题,我不知道最好的方法是什么...希望得到您有经验的反馈。

我有一个表单集 (SystemConfigurationFormset),它有一个包含以下两个字段的表单 (SystemConfiguration):

  1. memory_size - 整数字段
  2. cpu_cores - 整数字段

我已经阅读了很多关于 Formsets 的文章,如果我找到了正确的方法,我仍然有点困惑。本质上,我想在同一个网页上重复同一个表单 3 次。单击“提交”应该唯一地提交三个表单中的所有数据(使用一些前缀来标识表单集的每个表单)。

问题是,我需要为每个表单设置一个单独的标题。例如:

Form1-名称 Form2-名称

-表格 1-此处- -表格 2-此处-

(表格并排)

我将如何处理这种方法?现在,这是我讨厌的代码,我相信你可以看出它是不正确的:

        <div class="box-content">
        <div class="row-fluid"> 
            <form class="form-horizontal" action="" method="POST"> {% csrf_token %}
                <div class="span3" onTablet="span6" onDesktop="span3">
                    {{ formset.management_form }}
                    <h2><b>Application VM</b></h2>
                    <fieldset>
                        {{ formset.form.as_table }}
                    </fieldset>
                </div>
                <div class="span3" onTablet="span6" onDesktop="span3">
                    <h2><b>Router VM</b></h2>
                    <fieldset>
                        {{ formset.form.as_table }}
                    </fieldset>
                </div>
                <div class="span3" onTablet="span6" onDesktop="span3">
                    <h2><b>System VM</b></h2>
                    <fieldset>
                        {{ formset.form.as_table }}
                    </fieldset>
                </div>
        </div>
        <div class="form-actions">
            <!-- <button type="submit" class="btn btn-primary">Save changes</button> -->
            <button type="submit" class="btn btn-primary">Save</button>
            <button type="reset" class="btn">Reset</button>
        </div>
        </form>

非常感谢您的帮助!

这是一个解决方案,对表单的标题进行了一些改动。如果您想摆脱它,我建议您在视图中使用 python 的 zip 函数来组合表单集和标题列表。可以在 answer 中找到这样做的示例。

{{ formset.management_form }}
{% for form in formset %}
  <div class="span3" onTablet="span6" onDesktop="span3">
    <h2><b>
      {% if forloop.counter == 1 %}
        Application VM
      {% elif forloop.counter == 2 %}
        Router VM
      {% elif forloop.counter == 3 %}
        System VM
      {% endif %}
    </b></h2>
    <fieldset>
      {{ form.as_table }}
    </fieldset>
  </div>
{% endfor %}