[英]When I do submit formset in Django why do it returns extra 5 fields in formset?
When I do submit formset in Django it returns extra 5 fields in formset.当我在 Django 中提交表单集时,它会在表单集中返回额外的 5 个字段。 Suppose the initial queryset has 3 dictionary values.假设初始查询集有 3 个字典值。 But when I do submit the formset its returns an extra 5 dictionary.但是当我提交表单集时,它会返回一个额外的 5 个字典。 Why?为什么?
My form.py:我的form.py:
class SbTitleForm(forms.Form):
sb_title = forms.CharField(required=False)
sb_permission = forms.BooleanField(required=False)
SbTitleFormSet = formset_factory(SbTitleForm, extra=0)
My view.py:我的view.py:
def menuuser(request):
sbtitle = SbTitle.objects.all().values()
sbtitle_form = SbTitleFormSet(initial=sbtitle)
if request.method == 'POST':
sbtitle_form = SbTitleFormSet(request.POST, initial=sbtitle)
if sbtitle_form.is_valid():
print(sbtitle_form.cleaned_data)
context = {
'sbtitle_form':sbtitle_form,
}
return render(request, 'admins/user_role/user_permission.html', context)
My HTML:我的 HTML:
{% extends 'base/base.html' %}
{% load static %}
{% block content %}
<div class="card">
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{{ sbtitle_form.management_form }}
{{ sbitleelement_form.management_form }}
<div id="DataTables_Table_2_wrapper" class="dataTables_wrapper no-footer">
<div class="datatable-scroll">
<table class="table table-bordered table-hover datatable-highlight dataTable no-footer" id="DataTables_Table_2" role="grid" aria-describedby="DataTables_Table_2_info">
<thead>
<tr role="row" class="bg-teal-400">
<th class="sorting text-center h5" tabindex="0" aria-controls="DataTables_Table_2" rowspan="1" colspan="1" aria-label="Job Title: activate to sort column ascending">Sidebar Title</th>
</tr>
</thead>
<tbody>
{% for field in sbtitle_form %}
<tr role="row" class="odd">
<td class="sorting_1 text-center"><h4>{{ field.sb_title.value }} {{ field.sb_permission }}<p class="text-danger">{{ field.errors.as_text }}</p></h4></td>
{% endfor %}
</tbody>
</table>
</div>
<div class="card-footer">
<button class="btn btn-lg btn-primary" type="submit">Save</button>
</div>
</div>
</form>
</div>
{% endblock %}
when I try to print(sbtitle_form.cleaned_data) its return extra 5 field values like as [{'sb_title': '', 'sb_permission': True}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}]
.当我尝试打印(sbtitle_form.cleaned_data)时,它会返回额外的 5 个字段值,例如[{'sb_title': '', 'sb_permission': True}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}, {'sb_title': '', 'sb_permission': False}]
。 But I have only 3 initial values like as [{'id': 1, 'sb_title': 'Employ', 'user_role_id': None}, {'id': 2, 'sb_title': 'Today', 'user_role_id': None}, {'id': 3, 'sb_title': 'nextday', 'user_role_id': None}]
.但我只有 3 个初始值,如[{'id': 1, 'sb_title': 'Employ', 'user_role_id': None}, {'id': 2, 'sb_title': 'Today', 'user_role_id': None}, {'id': 3, 'sb_title': 'nextday', 'user_role_id': None}]
。 please help me to solve the请帮我解决
If I use multiple formsets in one view, I need to use prefix for the forms as explained here https://docs.djangoproject.com/en/2.2/topics/forms/formsets/#using-more-than-one-formset-in-a-view In short如果我在一个视图中使用多个表单集,我需要为表单使用前缀,如此处所述https://docs.djangoproject.com/en/2.2/topics/forms/formsets/#using-more-than-one-formset -in-a-view简而言之
Like as:像这样:
sbtitle_form = SbTitleFormSet(initial=sbtitle, prefix='Title')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.