【问题标题】:Django inlineformset extra lines being ignoredDjango inlineformset 额外的行被忽略
【发布时间】:2013-08-03 18:16:06
【问题描述】:

我正在尝试在我的表单中添加额外的行,但它似乎被忽略了。我有与django inlineformset_factory extra attribute being ignored? 类似的设置,但没有基本模型。我曾尝试实施该解决方案,但没有成功。有没有人可以在我的表单中添加额外的行?

这是我的代码:

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 }}

【问题讨论】:

    标签: django lines formset extra


    【解决方案1】:

    在您看来,您有一个 IndicatorForm 用于单个 Indicator 实例,还有一个 DiseaseFormSet 用于将多个 Disease 实例绑定到该单个 Indicator。然而在你的models.py中你有一个从IndicatorDiseaseForeignKey,这意味着Indicator只能绑定到一个Disease实例,而Disease实例可以有尽可能多的@ 987654333@ 随你喜欢。

    要修复它,请将 ForeignKeyIndicator 模型更改为 Disease 模型,将 Disease 模型更改为 Indicator 模型 - 或者如果您希望以其他方式周围,​​坚持使用您拥有的模型并将IndicatorFormSet 与单个DiseaseForm 一起使用。

    【讨论】:

    • 感谢您的建议。我选择了后者并坚持使用模型,以便一种疾病可以有多个指标。但是,出现了一个新问题,每次提交时都会在我的数据库表中创建一个新的疾病。我希望能够从数据库中的选择中进行选择,并将指标与我选择的疾病相关联。我以前的解决方案能够做到这一点。
    • 嗯,在我看来,您实际上想要针对单一指标的多种疾病和针对单一疾病的多种指标?使用ManyToManyField。无论如何,您可以更新问题中的代码吗?
    • 我实际上只想要一种疾病的多个指标(希望这会让事情变得更容易)。我会更新我的问题中的代码。
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 2019-12-30
    • 1970-01-01
    • 2019-10-11
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多