Django inlineformset被忽略的额外行
我试图在我的表格中添加额外的行,但它似乎被忽略了。我有一个类似的设置,但没有基本模型。我曾尝试实施该解决方案,但没有成功。有人有办法在我的表单中添加额外的行吗 这是我的密码: 型号.pyDjango inlineformset被忽略的额外行,django,lines,formset,extra,Django,Lines,Formset,Extra,我试图在我的表格中添加额外的行,但它似乎被忽略了。我有一个类似的设置,但没有基本模型。我曾尝试实施该解决方案,但没有成功。有人有办法在我的表单中添加额外的行吗 这是我的密码: 型号.py class Disease(models.Model): disease = models.CharField(max_length=300, verbose_name="disease") def __unicode__(self): return self.disease
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
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)
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))
Forms.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
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)
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))
视图.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
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)
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:
在您的视图中,对于单个
指标
实例,您有一个指标表单
,以及一个疾病表单集
,用于将多个疾病
实例绑定到该单个指标
。然而,在models.py中,您有一个从指示器到疾病的外键
,这意味着指示器
只能绑定到一个疾病
实例,而疾病
实例可以有任意多个指示器
要解决此问题,请将外键
从指示器
模型更改为疾病
模型,将疾病
模型更改为指示器
模型-或者如果您希望改变此模式,坚持使用您现有的型号,并将指示灯或MSET
与单个疾病表一起使用 谢谢你的建议。我选择了后者,并坚持使用模型,以便一种疾病可以有多个指标。然而,出现了一个新的问题,每次提交时都会在数据库表中创建一个新的疾病。我希望能够从数据库中选择与我选择的疾病相关的指标。我以前的解决方案能够做到这一点。嗯,在我看来,你真的希望一个指标有多个疾病,一个疾病有多个指标?使用一个。不管怎样,你能更新你问题中的代码吗?我实际上只想要一种疾病的多个指标(希望这能让事情变得更容易)。我将更新问题中的代码。