当使用外键链接保存modelForms时,Django的ManagementForm数据丢失或被篡改

nlr*_*r25 11 html forms django formsets

我对Django很新,所以这可能是一个简单的问题.我有2个modelForms,其中有一个ForeignKey到另一个.我的主要目标是保存指标与疾病(FK)的链接,这样对于特定疾病,您可以有多个指标.

使用下面的代码,当我点击"管理框架数据丢失或被篡改"提交时,我收到错误.另外,views.py中的代码似乎没有在返回HttpResponseRedirect的第3个'if'语句中进行验证.但是,当我检查我的数据库时,表单中的值已被写入.有关错误原因的任何想法?以及如何解决它?

我的代码如下:

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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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))   
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Yuj*_*ita 24

您的模板中既diseaseFormSet没有diseaseFormSet管理表单也没有管理表单,但您尝试实例化表单集.Formsets需要隐藏的管理表单,告诉django集合中有多少表单.

将其插入HTML

{{ diseaseFormSet.as_table }} 
{{ diseaseFormSet.management_form }}
Run Code Online (Sandbox Code Playgroud)