0

フォームに余分な行を追加しようとしていますが、無視されているようです。django inlineformset_factory の余分な属性が無視されるのと同様の設定がありますか? ただし、ベースモデルはありません。そのソリューションを実装しようとしましたが、成功しませんでした。私のフォームに余分な行を追加する解決策はありますか?

これが私のコードです:

モデル.py

class Disease(models.Model):
    disease = models.CharField(max_length=300, verbose_name="disease")

    def __unicode__(self):
      return self.disease


class Indicator(models.Model):
    relevantdisease = models.ForeignKey(Disease, verbose_name="disease")       
    indicator = models.CharField(max_length=300, verbose_name="indicators")

    def __unicode__(self):
      return self.indicator

Forms.py

MAX_INDICATORS = 3

class DiseaseForm(forms.ModelForm):
    class Meta:
       model = Disease

class IndicatorForm(forms.ModelForm):
    class Meta:
       model = Indicator

DiseaseFormSet = inlineformset_factory(Disease, 
    Indicator,
    can_delete=False,
    extra=MAX_INDICATORS,
    form=DiseaseForm)

IndicatorFormSet = inlineformset_factory(Indicator,
    IndicatorValue,
    can_delete=False,
    extra=MAX_INDICATORS,
    form=IndicatorForm)

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(reverse(something))

else:
   indicatorForm = IndicatorForm()
   diseaseInlineFormSet = DiseaseFormSet()

return render_to_response("something.html", {'indicatorForm': indicatorForm, 'diseaseInlineFormSet': diseaseInlineFormSet},context_instance=RequestContext(request))  

更新されたコード: 1 つの疾患が複数の指標にリンクされるようになったので、追加の行を取得できます。ただし、問題は、指標を保存してデータベースから疾患を選択するたびに、指標にリンクするデータベースに新しい疾患が書き込まれることです。

Views.py

def drui(request):
if request.method == "POST":

   diseaseForm  = DiseaseForm(request.POST)

   if diseaseForm.is_valid():
      new_disease = diseaseForm.save(commit=False)
      indicatorInlineFormSet = IndicatorFormSet(request.POST, instance=new_disease)

      if indicatorInlineFormSet.is_valid():
         new_disease.save()
         indicatorInlineFormSet.save()
         return HttpResponseRedirect(reverse(valdrui))

else:
   diseaseForm = DiseaseForm()
   indicatorInlineFormSet = IndicatorFormSet(instance=Disease())

return render_to_response("drui.html", {'diseaseForm': diseaseForm, 'indicatorInlineFormSet': indicatorInlineFormSet},context_instance=RequestContext(request)) 

フォーム.py

class DiseaseForm(forms.ModelForm):
    disease = forms.ModelChoiceField(queryset=Disease.objects.all())
    class Meta:
       model = Disease

class IndicatorForm(forms.ModelForm):
    class Meta:
       model = Indicator  

IndicatorFormSet = inlineformset_factory(Disease, 
    Indicator,
    can_delete=False,
    extra=MAX_INDICATORS)

HTML:

{{ diseaseForm.as_table }}
{{ indicatorInlineFormSet.as_table }}
4

1 に答える 1