当使用外键链接保存modelForms时,Django'ManagementForm数据丢失或被篡改 [英] Django 'ManagementForm data is missing or has been tampered with' when saving modelForms with foreign key link
问题描述
使用下面的代码,当我点击提交管理窗体数据丢失或被篡改时,我收到错误。此外,views.py中的代码似乎没有在第三个'if'语句中返回HttpResponseRedirect的验证。但是,当我检查我的数据库时,表单中的值已写入。任何关于为什么错误提出的想法?如何修复?
我的代码如下:
models.py
#Table for Disease
class疾病(models.Model):
disease = models.CharField(max_length = 300)
#Tables for Indicators
class指标(models.Model):
relateddisease = models.ForeignKey(疾病)
指标= models.CharField(max_length = 300)
forms.py
class DiseaseForm(forms.ModelForm):
class Meta:
model = Disease
class IndicatorForm(forms.ModelForm):
class Meta:
model = Indicator
疾病框架= inlineformset_factory(疾病,
指标,
can_delete = False,
form =疾病模式)
views.py
def drui (请求):
如果request.method ==POST:
indicatorForm = IndicatorForm(request.POST)
如果indicatorForm.is_valid():
new_indicator = indicatorForm.save()
diseaseInlineFormSet = DiseaseFormSet(request.POST,request.FILES,instance = new_indicator)
如果diseaseInlineFormSet.is_valid ():
diseaseInlineFormset.save()
返回HttpResponseRedirect('some_url.html')
其他:
指标符号= IndicatorForm()
diseaseInlineFormSet = DiseaseFormSet()
返回render_to_response(drui.html,{'indicatorForm':indicatorForm,'diseaseInlineFormSet':diseaseInlineFormSet},context_instance = RequestContext(request))
template.html
< form class =disease_formaction ={%url drui%}method =post> {%csrf_token%}
{{indicatorForm.as_table}}
< input type =submit name =submitvalue =Submitclass =button>
< / form>
你没有 diseaseFormSet
或 diseaseFormSet
的管理表单,但您尝试实例化表单集。表单需要隐藏的管理表单,告诉django该集合中有多少个表单。
将其插入到HTML
{{diseaseFormSet.as_table}}
{{diseaseFormSet.management_form}}
I am rather new to Django so this may be an easy question. I have 2 modelForms where there is a ForeignKey to another. My main goal is to save Indicators with a link to Disease (FK), such that for a particular disease, you can have multiple indicators.
With the code below, I get an error when I hit submit that says 'ManagementForm data is missing or has been tampered with'. Also, the code in views.py does not seem to be validating at the 3rd 'if' statement where there is a return HttpResponseRedirect. However, when I check my database, the values from the form have been written. Any ideas on why the error has been raised? and how to fix it?
My code is below:
models.py
#Table for Disease
class Disease(models.Model):
disease = models.CharField(max_length=300)
#Tables for Indicators
class Indicator(models.Model):
relevantdisease = models.ForeignKey(Disease)
indicator = models.CharField(max_length=300)
forms.py
class DiseaseForm(forms.ModelForm):
class Meta:
model = Disease
class IndicatorForm(forms.ModelForm):
class Meta:
model = Indicator
DiseaseFormSet = inlineformset_factory(Disease,
Indicator,
can_delete=False,
form=DiseaseForm)
views.py
def drui(request):
if request.method == "POST":
indicatorForm = IndicatorForm(request.POST)
if indicatorForm.is_valid():
new_indicator = indicatorForm.save()
diseaseInlineFormSet = DiseaseFormSet(request.POST, request.FILES, instance=new_indicator)
if diseaseInlineFormSet.is_valid():
diseaseInlineFormset.save()
return HttpResponseRedirect('some_url.html')
else:
indicatorForm = IndicatorForm()
diseaseInlineFormSet = DiseaseFormSet()
return render_to_response("drui.html", {'indicatorForm': indicatorForm, 'diseaseInlineFormSet': diseaseInlineFormSet},context_instance=RequestContext(request))
template.html
<form class="disease_form" action="{% url drui %}" method="post">{% csrf_token %}
{{ indicatorForm.as_table }}
<input type="submit" name="submit" value="Submit" class="button">
</form>
You have neither diseaseFormSet
nor diseaseFormSet
's management form in your template, yet you try to instantiate the formset. Formsets require the hidden management form which tells django how many forms are in the set.
Insert this into your HTML
{{ diseaseFormSet.as_table }}
{{ diseaseFormSet.management_form }}
这篇关于当使用外键链接保存modelForms时,Django'ManagementForm数据丢失或被篡改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!