javascript - 如何使用 2 个表单集并保存它们(POST 方法问题)

标签 javascript jquery django forms validation

事情就是这样,我在一个 django 模板中有 2 个表单集,为了验证表单集,django 使用管理数据来验证表单集,如下所示:

'form-TOTAL_FORMS': '1',
'form-INITIAL_FORMS': '0',
'form-MAX_NUM_FORMS': '',

但是当我想同时发布两个表单集时,它们需要两个不同的验证数据,因为例如,我的第一个表单集在提交时有 1 个表单,而第二个表单集有 2 个表单,因此第一个表单集需要一个数据与上面的数据类似,但第二个需要“TOTAL_FORMS”值为 2,但该帖子仅发送了一个验证数据,因此只有一个表单集有效,而另一个则无效。如果两个表单集中的表单数量相同(第一个表单集中有一个表单,第二个表单集中也有一个表单),则它们会通过验证,因为管理数据适用于这两个表单集。

我的模板如下

{% extends 'prescription_menu.html' %}
{% load bootstrap3 %}
{% load crispy_forms_tags %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}site/css/select2.css"/>
{% endblock %}

{% block title %}Physicians{% endblock title %}

% block container %}
{% csrf_token %}

<div class="row">
    <div class="col-md-offset-2 col-md-8">

            {% crispy person_form  %}
            {% crispy employee_form  %}
            {% crispy physician_form %}
            {% crispy address_form %}
            {% crispy phone_form %}
        <form id="otherForm" method="POST">
            <legend>Specialties</legend>
            {{ spec_formset.management_form }}
            {{ ac_de_formset.management_form }}
            {% for specialty, degree in SDU %}
                    {% crispy specialty helper %}
                    {% crispy degree helper %}
                <legend></legend>
            {% endfor %}
        </form>
        <form id="emailsForm" method="POST">
            {{ em_formset.management_form }}
            {% for email in em_formset %}
                {% crispy email helper %}
            {% endfor %}
        </form>




        <input type="button" name="Save" value="Save" class="btn btn-primary" id="submit-id-save" onclick="submitForms()">
    </div>
</div>
{% endblock container %}


{% block javascript %}
<script>
submitForms = function(){
    document.getElementById("otherForm").submit();
    document.getElementById("emailsForm").submit();
}
</script>
{% endblock javascript %}

最佳答案

在 View 中构造表单集时使用前缀参数,以使两个表单集不共享命名空间,例如:

spec_formset = SomeFormsetClass(prefix="spec")
ac_de_formset = SomeOtherFormsetClass(prefix="ac_de")

docs有完整的详细信息。

关于javascript - 如何使用 2 个表单集并保存它们(POST 方法问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35992852/

相关文章:

javascript - AngularJS 服务返回未定义

json - 带有 postgres 的 Django 的非关系数据库模式

Django clean 方法在 POST 上抛出 KeyError

javascript - 在 ui-router 中保持 onExit

javascript - Angular 形式的补丁值

php - javascript post 到 .php 文件一台服务器不起作用 - 在浏览器中手动输入 URL 到相同的 .php 可以工作

javascript - 与事件关联的 setTimeout 函数

jquery - 使用 jQgrid 进行服务器端分页

javascript - 通过 jQuery 淡入、淡出循环

python - 导航栏通知的 Django 模板语言语法