Javascript 添加了动态表单的Modelformset只保存第一个表单

Javascript 添加了动态表单的Modelformset只保存第一个表单,javascript,django,django-forms,django-templates,Javascript,Django,Django Forms,Django Templates,我在一个页面上有两个表单,每个表单都有自己的提交按钮。使用JS脚本,我可以为两个表单中的每一个动态添加一个新的表单集。我面临的情况是,我可以为页面上首先显示的表单添加任意多的新表单,并保存所有表单。对于第二个表单列表,仅保存表单集列表中的第一个表单 template.html 您的两个表单是相似的,因此目标始终是同一个页面,因此Django将以相同的方式处理这两个表单。如果在您的页面中,您在POST中处理第一个表单的值,那么第二个表单将像处理第一个表单一样处理 最好的解决方案是发送一个大表单,第

我在一个页面上有两个表单,每个表单都有自己的提交按钮。使用JS脚本,我可以为两个表单中的每一个动态添加一个新的表单集。我面临的情况是,我可以为页面上首先显示的表单添加任意多的新表单,并保存所有表单。对于第二个表单列表,仅保存表单集列表中的第一个表单

template.html

您的两个表单是相似的,因此目标始终是同一个页面,因此Django将以相同的方式处理这两个表单。如果在您的页面中,您在POST中处理第一个表单的值,那么第二个表单将像处理第一个表单一样处理

最好的解决方案是发送一个大表单,第一组和第二组中所有字段的名称都不同,并且只读取第一组或第二组(如果为空)


另一个解决方案是将第二个表单发送到另一个url。

@OliverPons不同名称的字段是什么意思?关于另一个解决方案-将表单发送到不同的url,我需要在一个页面上处理所有表单。在循环中,当您执行{form}时,它会生成名称,如等等,您可以执行自己的循环并生成自己的名称,但这很复杂。第二种解决方案可能更好。在这个故事中,我被一个事实弄糊涂了:如果没有JS代码,当我将多个表单放入模板时,我使用了extra=2参数,例如,两个表单都可以正常工作。在我看来,在添加JS代码时,我并没有改变Django的逻辑,尽管我可能错了。但另一个问题是,我不能发送空表单。第二个技巧是一个表单-一个模板?当您的表单无效时,意味着您发送了无效字段,例如不允许为空的空字段。对于第二种类型,是一个表单,一个目的地=action=应该填充url,比如action=http://other_handle_of_form2
<form method="post" action="">{% csrf_token %}
{{ formset_planguage.management_form }}
    <div id="form_set_lang">
{% for form in formset_planguage.forms %}
{{form.non_field_errors}}
        {{form.errors}}
        <table class='no_error'>
            {{ form }}
        </table>
    {% endfor %}
</div>
<input type="button" value="Add More" id="add_more_lang">
<div id="empty_form_lang" style="display:none">
    <table class='no_error'>
        {{ formset_planguage.empty_form }}
    </table>
</div>
 <input class='btn btn-primary' type="submit" name="language" value="Submit"/>
</form>


<form method="post" action="">{% csrf_token %}
{{ formset_framework.management_form }}
    <div id="form_set_framework">
{% for form in formset_framework.forms %}
{{form.non_field_errors}}
        {{form.errors}}
        <table class='no_error'>
            {{ form }}
        </table>
    {% endfor %}
</div>
<input type="button" value="Add More" id="add_more_framework">
<div id="empty_form_framework" style="display:none">
    <table class='no_error'>
        {{ formset_framework.empty_form }}
    </table>
</div>
 <input class='btn btn-primary' type="submit" name="framework" value="Submit"/>
</form>


<script> 
$('#add_more_framework').click(function() {
    var form_idx = $('#id_form-TOTAL_FORMS').val();
    $('#form_set_framework').append($('#empty_form_framework').html().replace(/__prefix__/g, form_idx));
    $('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
});
</script>

<script>
$('#add_more_lang').click(function() {
    var form_idx = $('#id_form-TOTAL_FORMS').val();
    $('#form_set_lang').append($('#empty_form_lang').html().replace(/__prefix__/g, form_idx));
    $('#id_form-TOTAL_FORMS').val(parseInt(form_idx) + 1);
});
</script>