11

私は Django にかなり慣れていないので、これは簡単な質問かもしれません。別のモデルへの ForeignKey がある 2 つの modelForms があります。私の主な目標は、特定の病気に対して複数のインジケーターを使用できるように、病気 (FK) へのリンクを使用してインジケーターを保存することです。

以下のコードでは、送信を押したときに「ManagementForm データが見つからないか、改ざんされています」というエラーが表示されます。また、views.py のコードは、return 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)

フォーム.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)

ビュー.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>
4

1 に答える 1

26

diseaseFormSetテンプレートにもの管理フォームもありdiseaseFormSetませんが、フォームセットをインスタンス化しようとしています。フォームセットには、セット内のフォームの数を django に伝える非表示の管理フォームが必要です。

これを HTML に挿入します

{{ diseaseFormSet.as_table }} 
{{ diseaseFormSet.management_form }}
于 2013-08-02T17:38:42.350 に答える