Django formsets inlineformset保存到数据库而没有外键链接

时间:2013-08-03 19:47:09

标签: database django formsets

我有一种与多种指标相关的疾病。我的问题是,每当我保存我的指标并从我的下拉列表中选择一种疾病时,一种新疾病将写入链接到指标的数据库。

我想有一个从我的疾病表中采样的下拉菜单。用户选择疾病并输入指标。指标保存在指标表中,其中包含疾病表中疾病的链接(而不是在疾病表中编写新疾病)。

我用它作为参考参考:http://charlesleifer.com/blog/djangos-inlineformsetfactory-and-you/

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

更新 我使用Mariodev的建议让它工作,但只有我输入PK = 1或其他一些硬编码的数字。如何通过用户选择的PK?选择来自PK = id的疾病表。这是我的views.py:

的片段
def drui(request, id):

    if request.method == "POST":


       disease = get_object_or_404(Disease, pk=id)
       diseaseForm = DiseaseForm(request.POST, instance=disease)

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

当我点击提交时,我收到此错误:drui()正好接受2个参数(给定1个)。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

是的,我的第一个建议是错误的。您应该做的是在编辑视图中显示inlineformset,这样您就可以使用现有对象创建DiseaseForm实例。所以而不是:

diseaseForm = DiseaseForm(request.POST)

你这样做:

disease = get_object_or_404(Disease, pk=disease_id)
diseaseForm = DiseaseForm(request.POST, instance=disease)

来自网址的疾病

相关问题