【问题标题】:Django: Save same formset multiple timesDjango:多次保存相同的表单集
【发布时间】:2015-04-29 14:51:34
【问题描述】:

这听起来可能很愚蠢,但我的视图中有一个用于单个模型的 model_formset,它已传递给我的模板。在我的模板中,我将表单集放在一个循环中:

<form action="generate/" method="post">
    {% csrf_token %}
    {{ formset.management_form }}
    {% for count in formset_count %}
        <p id="{{ count }}">{{ formset }}</p>
    {% endfor %}
    <div class="submitbutton" style="text-align: center;">
        <input type="submit" value="Submit">
    </div>
</form>

formset_count 只是 1 到 5 的范围。我有 javascript 可以自动在 formset 中输入必要的值,每个 formset 都略有不同。我想通过点击一次提交按钮同时提交并保存所有 5 个表单集。

在我的生成视图中,我有正常的:

f = MyFormSet(request.POST)
if f.is_valid():
    f.save()
    return HttpResponse("Saved")
else:
    return HttpResponse(f.errors)

这只会保存循环中的最后一个表单集。

是否可以使用 modelformset_factory 一次保存所有 5 个表单集(具有不同值的相同表单集)?

【问题讨论】:

    标签: django loops formset


    【解决方案1】:

    我认为您的模板需要做一些工作。看起来您正在使用&lt;p id="{{ count }}"&gt;{{ formset }}&lt;/p&gt; 渲染整个表单集 5 次。也可以使用Django's built-inforloop.counter获取序号。

    <form action="generate/" method="post">
        {% csrf_token %}
        {{ formset.management_form }}
        {% for form in formset %}
            <p id="{{forloop.counter}}">{{ form }}</p>
        {% endfor %}
        <div class="submitbutton" style="text-align: center;">
            <input type="submit" value="Submit">
        </div>
    </form>
    

    你的视图代码应该没问题,as per the docs

    【讨论】:

    • 我确实在尝试渲染整个表单集 5 次 :)。我的 javascript 使用 id="{{ count }}" 元素确保 5 个表单集中的每个表单都正确完成。因此,多个表单集中的多个表单中的每一个都应在提交时保存。
    • 在这种情况下,我认为 Django 无法区分 5 个表单集,因此只会保存最后一个。为什么不将 5 个不同的表单集传递给您的模板?
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2018-01-11
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多