2013-08-02 34 views
11

我对Django相当陌生,所以这可能是一个简单的问题。我有2个modelForms,其中有一个ForeignKey到另一个。我的主要目标是将指标与疾病(FK)联系起来,这样对于特定疾病,您可以有多个指标。Django'ManagementForm数据丢失或被篡改'当保存带有外键链接的modelForms

使用下面的代码,当我点击“ManagementForm数据丢失或被篡改”提交时,出现错误。另外,views.py中的代码似乎没有在第3个'if'语句中有返回HttpResponseRedirect的验证。但是,当我检查我的数据库时,表单中的值已写入。关于为什么错误已被提出的任何想法?以及如何解决它?

我的代码如下:

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> 
+0

见https://docs.djangoproject.com/en/stable/topics/forms/formsets/#understanding-the-managementform。 –

回答

24

您既没有diseaseFormSet也没有diseaseFormSet的管理窗体在您的模板中,但您尝试实例化formset。表单集要求隐藏的管理表单,它告诉django集合中有多少表单。

插入该到HTML

{{ diseaseFormSet.as_table }} 
{{ diseaseFormSet.management_form }} 
+0

我仍然得到相同的错误。如果我拿出{{indicatorForm.as_table}}并添加上面的2行,我的表单显示为完全空白。当我保留{{indicatorForm.as_table}}并在{indicatorForm}}上面添加2行时,我的表单会显示,但会引发'管理数据丢失错误'。 – nlr25

+0

其实,我假设你的意思是{{diseaseInlineFormSet.management_form}},因为我将它传递给render_to_response。现在我的错误是“全球名称”diseaseInlineFormset'未定义“。我不知道我应该在哪里定义这个变量... – nlr25

+0

玩过它了!有用。在我的view.py中有一个拼写错误,它应该说疾病InlineFormSet而不是diseaseInLineFormset。另外,传递{{diseaseInlineFormSet.management_form}}是真正的问题。谢谢! – nlr25

相关问题