Django Forms手动格式化

时间:2015-05-28 18:43:00

标签: django forms formset

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

我有一个formset(SystemConfigurationFormset),它有一个带有以下两个字段的表单(SystemConfiguration):

  1. memory_size - IntegerField
  2. cpu_cores - IntegerField
  3. 我已经阅读了很多关于Formsets的内容,如果我有正确的方法,我仍然有点困惑。基本上,我想在同一个网页上重复同样的表格3次。单击“提交”应该唯一地提交三个表单中的所有数据(使用一些前缀来标识表单集的每个表单)。

    问题是,我需要为每个表单分别标题。例如:

    Form1-Name Form2-Name

    -form-1-here- -form-2-here -

    (彼此相邻的表格)

    我将如何采用这种方法?现在,这是我讨厌的代码,我相信你可以告诉它是不正确的:

            <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>
    

    非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是一个解决方案,对表单的标题有一点黑客攻击。如果你想摆脱它,我建议在你的视图中使用python的zip函数来组合formset和标题列表。在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 %}