Formsets 错误 [u'ManagementForm 数据丢失或已被篡改']
Formsets error [u'ManagementForm data is missing or has been tampered with']
我有这个错误 [u'ManagementForm data is missing or has been tampered with']
,即使 management_form 在模板中,我在模板中使用了 2 个表单,我试图在表单集中放置一个前缀,但是它不接受前缀。这是我的代码。我不知道我错过了什么,或者我是否需要制作这两种表格,表格集。 (第一次使用表单集)。
view.py
def DrugsPrescription(request, id):
data = RecipeDataForm(prefix='data')
drugs_formset = formset_factory(DrugsForm)
patient = PatientData.objects.get(pk=id)
errors = None
if request.method == 'POST':
data = RecipeDataForm(request.POST, prefix='data')
drugs_formset = drugs_formset(request.POST, prefix="med")
if data.is_valid():
info = data.save(commit=False)
info.patient = patient
if drugs_formset.is_valid():
info.save()
for form in drugs_formset.forms:
print form
med = drugs_formset.save(commit=False)
med.datos_id = info.pk
med.save()
success_url = reverse('/')
return HttpResponseRedirect(success_url)
else:
print drugs_formset.errors
else:
print data.errors
return render(
request, 'prescription.html',
{'data': data,
'patient': patient,
'drugs_formset': drugs_formset,
'errors': errors})
template.html
<form class="medical" id="drugs" method="POST" enctype="multipart/form-data">
{% crispy data %}
<div>{{errors}}</div>
<div id="data">
{{ drugs_formset.management_form }}
<table border="2">
{% for form in drugs_formset %}
<tr>
{{ form }}
</tr>
{% endfor %}
</table>
</div>
当请求不是 POST 时,您也必须实例化您的表单集。
同时避免对表单集 class 和表单集实例使用相同的变量。
您的代码应该是:
def drugs_prescription(request, id):
DrugsFormSet = formset_factory(DrugsForm)
patient = PatientData.objects.get(pk=id)
errors = None
if request.method == 'POST':
data = RecipeDataForm(request.POST, prefix='data')
drugs_formset = DrugsFormSet(request.POST, prefix="med")
if data.is_valid():
info = data.save(commit=False)
info.patient = patient
if drugs_formset.is_valid():
info.save()
for form in drugs_formset.forms:
print form
med = drugs_formset.save(commit=False)
med.datos_id = info.pk
med.save()
success_url = reverse('/')
return HttpResponseRedirect(success_url)
else:
print drugs_formset.errors
else:
print data.errors
else:
data = RecipeDataForm(prefix='data')
drugs_formset = DrugsFormSet(prefix='med')
return render(
request, 'prescription.html',
{'data': data,
'patient': patient,
'drugs_formset': drugs_formset,
'errors': errors})
我还将您的函数从 DrugsPrescription
重命名为 drugs_prescription
以匹配 python 样式约定。
我有这个错误 [u'ManagementForm data is missing or has been tampered with']
,即使 management_form 在模板中,我在模板中使用了 2 个表单,我试图在表单集中放置一个前缀,但是它不接受前缀。这是我的代码。我不知道我错过了什么,或者我是否需要制作这两种表格,表格集。 (第一次使用表单集)。
view.py
def DrugsPrescription(request, id):
data = RecipeDataForm(prefix='data')
drugs_formset = formset_factory(DrugsForm)
patient = PatientData.objects.get(pk=id)
errors = None
if request.method == 'POST':
data = RecipeDataForm(request.POST, prefix='data')
drugs_formset = drugs_formset(request.POST, prefix="med")
if data.is_valid():
info = data.save(commit=False)
info.patient = patient
if drugs_formset.is_valid():
info.save()
for form in drugs_formset.forms:
print form
med = drugs_formset.save(commit=False)
med.datos_id = info.pk
med.save()
success_url = reverse('/')
return HttpResponseRedirect(success_url)
else:
print drugs_formset.errors
else:
print data.errors
return render(
request, 'prescription.html',
{'data': data,
'patient': patient,
'drugs_formset': drugs_formset,
'errors': errors})
template.html
<form class="medical" id="drugs" method="POST" enctype="multipart/form-data">
{% crispy data %}
<div>{{errors}}</div>
<div id="data">
{{ drugs_formset.management_form }}
<table border="2">
{% for form in drugs_formset %}
<tr>
{{ form }}
</tr>
{% endfor %}
</table>
</div>
当请求不是 POST 时,您也必须实例化您的表单集。
同时避免对表单集 class 和表单集实例使用相同的变量。
您的代码应该是:
def drugs_prescription(request, id):
DrugsFormSet = formset_factory(DrugsForm)
patient = PatientData.objects.get(pk=id)
errors = None
if request.method == 'POST':
data = RecipeDataForm(request.POST, prefix='data')
drugs_formset = DrugsFormSet(request.POST, prefix="med")
if data.is_valid():
info = data.save(commit=False)
info.patient = patient
if drugs_formset.is_valid():
info.save()
for form in drugs_formset.forms:
print form
med = drugs_formset.save(commit=False)
med.datos_id = info.pk
med.save()
success_url = reverse('/')
return HttpResponseRedirect(success_url)
else:
print drugs_formset.errors
else:
print data.errors
else:
data = RecipeDataForm(prefix='data')
drugs_formset = DrugsFormSet(prefix='med')
return render(
request, 'prescription.html',
{'data': data,
'patient': patient,
'drugs_formset': drugs_formset,
'errors': errors})
我还将您的函数从 DrugsPrescription
重命名为 drugs_prescription
以匹配 python 样式约定。