我想在表單中添加額外的行,但它似乎被忽略。我有一個與django inlineformset_factory extra attribute being ignored?類似的設置,但沒有基本型號。我試圖實現該解決方案,但沒有成功。有沒有人有解決方案在我的表單中添加額外的行?Django inlineformset被忽略的額外行
這裏是我的代碼:
Models.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))
forms.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 }}
感謝您的建議。我與後者一起去了,並堅持使用模型,以便1種疾病可以有多個指標。但是,出現了一個新問題,每次提交時都會在我的數據庫表中創建一個新的疾病。我希望能夠從數據庫中挑選,並有指標與我選擇的疾病相關聯。我以前的解決方案能夠做到這一點。 – nlr25
嗯,在我看來,你實際上想要單一疾病的多種疾病和單一疾病的多個指標?使用['ManyToManyField'](https://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield)。無論如何,你能否更新你的問題中的代碼? – knbk
我實際上只想要一個疾病的多個指標(希望這可以讓事情變得更容易)。我會更新我的問題中的代碼。 – nlr25