0

我正在尝试添加不带 javascript 的内联行,类似于此 SO 帖子:Django:添加不带 javascript 的内联表单集行

但是,当我按添加时,表单会重新初始化并且不会添加额外的行。我究竟做错了什么?

表格.py

IndicatorFormSet2 = inlineformset_factory(Disease, Indicator)

视图.py

  disease = get_object_or_404(Disease, pk=disease_id)  

  if request.method == "POST": 
      if 'add' in request.POST:
        cp = request.POST.copy()
        cp['form-TOTAL_FORMS'] = int(cp['form-TOTAL_FORMS'])+1
        indicatorInlineFormSet = IndicatorFormSet2(request.POST, cp, prefix='form')
        return HttpResponseRedirect(reverse('drui', kwargs={'disease_id':disease_id}))

  if indicatorInlineFormSet.is_valid():
      indicatorInlineFormSet.save()
      return HttpResponseRedirect(reverse('valdrui', kwargs={'disease_id':disease_id}))

  else:
      indicatorInlineFormSet = IndicatorFormSet2(instance=disease, prefix='form')
4

2 回答 2

0

我实际上能够做一个解决方法来让它工作。

视图.py

 if indicatorInlineFormSet.is_valid() and 'add' in request.POST:
     indicatorInlineFormSet.save()
     return HttpResponseRedirect(reverse('drui', kwargs={'disease_id':disease_id}))

 elif indicatorInlineFormSet.is_valid():
     indicatorInlineFormSet.save()
     return HttpResponseRedirect(reverse('next_page', kwargs={'disease_id':disease_id}))

表格.py

 IndicatorFormSet2 = inlineformset_factory(Disease, Indicator, extra=1)

表单将使用额外的内联进行验证和反转。

于 2013-08-30T05:58:21.653 回答
0

我认为您需要更新表单集工厂以拥有更多表单,例如:

disease = get_object_or_404(Disease, pk=disease_id)  

  if request.method == "POST": 
      if 'add' in request.POST:
        cp = request.POST.copy()
        total = int(cp['form-TOTAL_FORMS'])

        #add max_num and extra params to formset factory
        IndicatorFormSet2 = inlineformset_factory(Disease, Indicator, 
                            max_num=total+1, extra=1)

        indicatorInlineFormSet = IndicatorFormSet2(request.POST, cp, prefix='form')
        return HttpResponseRedirect(reverse('drui', kwargs={'disease_id':disease_id}))
于 2013-08-30T05:45:52.940 回答