首页 > 解决方案 > Django:如何在不包含每个字段的情况下呈现我的表单集

(或任何其他)元素而不丢失管理形式?

问题描述

我正在通过以下方式渲染我的模型表单集:

<form method="POST" class="note-form">
    {{ formset.management_data }}
    {% csrf_token %}
    {{ formset.as_p}}
    <input type="submit" value="Save">
</form>

但是,这会呈现元素中每个表单中的每个字段<p>,这是我不想要的。解压出来是这样的:

<form method="POST" class="note-form">
    <input type="hidden" name="csrfmiddlewaretoken"...>
    <input type="hidden" name="form-TOTAL-FORMS"...>
    <input type="hidden" name="form-INITIAL-FORMS"...>
    <input type="hidden" name="form-MIN-NUM-FORMS"...>
    <input type="hidden" name="form-MAX-NUM-FORMS"...>
    <p>
        <textarea ...></textarea>
    </p>
    <p>
        <input ...>
    </p>
    <p>
        <input ...>
    </p>
    <p>
        <textarea ...></textarea>
    </p>
    ...and so on...
</form>

相反,我想要这样呈现的东西

<form method="POST" class="note-form">
    <input type="hidden" name="csrfmiddlewaretoken"...>
    <input type="hidden" name="form-TOTAL-FORMS"...>
    <input type="hidden" name="form-INITIAL-FORMS"...>
    <input type="hidden" name="form-MIN-NUM-FORMS"...>
    <input type="hidden" name="form-MAX-NUM-FORMS"...>
    <div ...>
        <textarea ...></textarea>
        <input ...>
        <input ...>
    </div>
    <div ...>
        <textarea ...></textarea>
        <input ...>
        <input ...>
    </div>
    ....and so on....

也就是说,div 元素中的每个单独的表单。现在,我尝试执行以下操作

    <form method="POST" class="note-form">

        {{ formset.management_data }}
        {% csrf_token %}
        {% for form in formset %}
            <div>
                {{ form }}
            </div>
        {% endfor %}
        <input type="submit" value="Save">
    </form>

这会按照我想要的方式呈现表单集。这样做的问题是,当我这样做时,管理数据消失了,并且出现错误“ManagementForm 数据丢失或已被篡改”。

我在文档中发现了一些类似的东西,但仍然对我不起作用。我究竟做错了什么?

标签: djangodjango-forms

解决方案


尝试:

<table>
    {{ formset.as_table }}
</table>

推荐阅读