下面是从我的表单发送回视图的POST数据。这会导致验证错误“ManagementForm数据丢失或已被篡改”
<QueryDict: {
"csrfmiddlewaretoken": ["..."],
"project_title": ["project test"],
"project_number": ["543219876"],
"project_status": ["Active"],
"project_initiation_date": ["2019-10-10"],
"project_alias": ["alias"],
"project_description": ["description"],
"estimated_total_cost": ["100"],
"project_type": ["Capital"],
"project_start_date": ["2019-09-16"],
"project_end_date": ["2019-10-10"],
"city_department": ["CDD"],
"fundingsource_set-TOTAL_FORMS": ["2", ""],
"fundingsource_set-INITIAL_FORMS": ["0", ""],
"fundingsource_set-MIN_NUM_FORMS": ["0", ""],
"fundingsource_set-MAX_NUM_FORMS": ["1000", ""],
"fundingsource_set-0-funding_source_number": ["876543"],
"fundingsource_set-0-funder": ["cve"],
"fundingsource_set-0-funder_contact": ["scott"],
"fundingsource_set-0-contract_number": ["876543"],
"fundingsource_set-0-phone_0": ["123456789"],
"fundingsource_set-0-phone_1": [""],
"fundingsource_set-0-email": ["mar@gmail.com"],
"fundingsource_set-0-funds_type": ["Loan"],
"fundingsource_set-0-funding_amount": ["30"],
"fundingsource_set-0-percentage_of_funding": ["30"],
"fundingsource_set-0-funding_agency_type": ["Federal"],
"fundingsource_set-0-is_awarded": ["on"],
"fundingsource_set-0-is_being_leveraged": ["on"],
"fundingsource_set-0-funding_doc_type": ["MOU"],
"fundingsource_set-0-date_funding_doc_submitted": ["2019-10-10"],
"fundingsource_set-0-date_project_budget_docs_submitted": ["2019-10-10"],
"fundingsource_set-0-have_funding_reimbursement_requests": ["true"],
"fundingsource_set-0-date_funding_reimbursement_request_docs_submitted": ["2019-10-10"],
"fundingsource_set-1-funding_source_number": ["987123"],
"fundingsource_set-1-funder": ["observian"],
"fundingsource_set-1-funder_contact": ["aravind"],
"fundingsource_set-1-contract_number": ["987123"],
"fundingsource_set-1-phone_0": ["123456678"],
"fundingsource_set-1-phone_1": [""],
"fundingsource_set-1-email": ["mar@gmail.com"],
"fundingsource_set-1-funds_type": ["Loan"],
"fundingsource_set-1-funding_amount": ["33"],
"fundingsource_set-1-percentage_of_funding": ["33"],
"fundingsource_set-1-funding_agency_type": ["Federal"],
"fundingsource_set-1-is_awarded": ["on"],
"fundingsource_set-1-is_being_leveraged": ["on"],
"fundingsource_set-1-funding_doc_type": ["MOU"],
"fundingsource_set-1-date_funding_doc_submitted": ["2019-10-10"],
"fundingsource_set-1-date_project_budget_docs_submitted": ["2019-10-10"],
"fundingsource_set-1-have_funding_reimbursement_requests": ["true"],
"fundingsource_set-1-date_funding_reimbursement_request_docs_submitted": ["2019-10-10"],
}
>此窗体在内联窗体集中有父窗体的1个实例和子窗体的2个实例。
'fundingsource_set-TOTAL_FORMS': ['2', ''],
'fundingsource_set-INITIAL_FORMS': ['0', ''],
'fundingsource_set-MIN_NUM_FORMS': ['0', ''],
'fundingsource_set-MAX_NUM_FORMS': ['1000', '']它们应该是列表吗?如果是这样的话,列表中的每一项都表示什么?
下面是我用来呈现这个表单集的模板片段
<fieldset class="form-group card card-body">
<h4>Funding Sources</h4>
<div class="FundingSourceFormset card card-body">
<h5>Funding Source</h5>
{{ funding_source_form.management_form }}
{{ funding_source_form.non_form_erros }}
{% for form in funding_source_form %}
<div class="row">
<div class="col-md-4">
<p>{{ form.funding_source_number | as_crispy_field }}</p>
</div>
-----
rendered all formset fields as crispy fields
-----
</div>
{% enfor %}
</div>
</fieldset>
<fieldset class="form-group">
<button class="btn btn-outline-info" type="submit">Create Project</button>
</fieldset>
<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
<script src="/media/jquery.formset.js"></script>
<script type="text/javascript">
$('.FundingSourceFormset').formset({
addCssClass: 'btn btn-primary btn-block',
addText: 'Add additional funding source',
deleteCssClass: 'btn',
deleteText: 'Remove this Funding Source',
prefix: '{{ funding_source_form.prefix }}'
});
</script>我是不是做错了?
发布于 2019-11-12 01:13:25
它不应该是一个列表。
该管理表单具有多个值,这意味着您可能还会多次POSTing它。
检查你的模板和/或渲染的超文本标记语言-我打赌你会发现多个TOTAL_FORMS,等等。
发布于 2019-11-12 03:37:31
问题出在@DanielRoseman在上面的评论中提到的management_form的立场。
根据django-dynamic-formset的文档,management_form应该在您传递给.formset()方法的DOM元素之外
新的模板片段如下所示
<fieldset class="form-group card card-body">
<h4>Funding Sources</h4>
{{ funding_source_form.management_form }}
{{ funding_source_form.non_form_erros }}
<div class="FundingSourceFormset card card-body">
<h5>Funding Source</h5>
{% for form in funding_source_form %}
<div class="row">
<div class="col-md-4">
<p>{{ form.funding_source_number | as_crispy_field }}</p>
</div>
-----
rendered all formset fields as crispy fields
-----
</div>
{% enfor %}
</div>
</fieldset>
<fieldset class="form-group">
<button class="btn btn-outline-info" type="submit">Create Project</button>
</fieldset>
<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
<script src="/media/jquery.formset.js"></script>
<script type="text/javascript">
$('.FundingSourceFormset').formset({
addCssClass: 'btn btn-primary btn-block',
addText: 'Add additional funding source',
deleteCssClass: 'btn',
deleteText: 'Remove this Funding Source',
prefix: '{{ funding_source_form.prefix }}'
});
</script>https://stackoverflow.com/questions/58805792
复制相似问题