And*_*oga 9 django django-forms
我正在尝试使用编辑formset.然后,我使用modelformset_factory实例化formset中的对象.当请求不是POST时,formset加载完美,但是,如果请求是POST,则formset构造函数会引发MultiValueDictKeyError.
这是我的代码.
class SchoolSectionForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
Div(
'name',
css_class='name',
),
)
super(SchoolSectionForm, self).__init__(*args, **kwargs)
class Meta:
model = SchoolSection
exclude = [
'school',
'created_by',
]
class SectionBreakFormSet(BaseFormSet):
def __init__(self, *args, **kwargs):
super(SectionBreakFormSet, self).__init__(*args, **kwargs)
class SectionBreakForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.layout = Layout(
Div(
Div(
'start_time',
css_class='start_time',
),
Div(
'end_time',
css_class='end_time',
),
css_class='formset_element',
)
)
super(SectionBreakForm, self).__init__(*args, **kwargs)
class Meta:
model = SectionBreak
exclude = [
'school_section',
'created_by',
]
Run Code Online (Sandbox Code Playgroud)
def school_section_edit(request, section_id):
section = get_object_or_404(
SchoolSection,
id=section_id,
)
current_school = request.user.current_school
school_sections_list = current_school.schoolsection_set.all()
section_break_formset = modelformset_factory(
SectionBreak,
max_num=3,
extra=0,
form=SectionBreakForm,
)
formset_qset = SectionBreak.objects.filter(school_section=section)
formset = section_break_formset(queryset=formset_qset)
school_section_form = SchoolSectionForm(instance=section)
if request.method == 'POST':
school_section_form = SchoolSectionForm(request.POST)
# Bug raises in this line
formset = section_break_formset(request.POST, queryset=formset_qset)
# Bug raises in this line
if school_section_form.is_valid() and formset.is_valid():
school_section_form.save()
formset.save()
messages.success(
request,
u'xxx',
)
return HttpResponseRedirect(reverse('school:school_section_add'))
else:
messages.error(
request,
u'xxx',
)
return render(request, 'school/schoolsection_add.html', {
'school_section_form': school_section_form,
'formset': formset,
'school_sections_list': school_sections_list,
})
Run Code Online (Sandbox Code Playgroud)
<form class="new_section_form" method="post" action="">
<div class="school_section_form">
{% crispy school_section_form %}
</div>
<h3>Horarios de descanso:</h3>
<div class="section_break_formset">
{% crispy formset formset.form.helper %}
</div>
<button class="button color">guardar</button>
</form>
Run Code Online (Sandbox Code Playgroud)
当我发布表格...崩溃....我有这个错误
感谢帮助...
异常类型:/ administrador/ciclo-educativo/editar/34/Exception值中的MultiValueDictKeyError:在<> QueryDict中找不到"Key u'form-0-id":{u'name':[u'Primaria'],u 'form-MAX_NUM_FORMS':[u'3'],u'form-TOTAL_FORMS':[u'1'],u'form-0-start_time':[u'07:00:00'],u'form -0-end_time':[u'12:00:00'],u'form-INITIAL_FORMS':[u'1'],u'csrfmiddlewaretoken':[u'aZkZPJ6tlzJeCd1kjC0EpkjPuFbWe6IB',u'aZkZPJ6tlzJeCd1kjC0EpkjPuFbWe6IB']} <> "
小智 26
您可能需要添加表单id {{form.id}},例如
{% crispy formset formset.form.id %}
表单ID是隐藏字段,但如果您不在表单中包含它,那么它将通过上述错误.如果将它包含在您的模板中,您将摆脱上述错误
Ex:
{{form.title}} #this field you want to display
{{ form.id }} # this is hidden field, this will not get display in form. but at the time of form-set submission this is required.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7763 次 |
最近记录: |