【问题标题】:adding inline rows without javascript not adding rows添加没有javascript的内联行不添加行
【发布时间】:2013-08-30 05:31:49
【问题描述】:

我正在尝试添加不带 javascript 的内联行,类似于此 SO 帖子:Django: Adding inline formset rows without javascript

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

forms.py

IndicatorFormSet2 = inlineformset_factory(Disease, Indicator)

views.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')

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我实际上能够做一个变通来让它工作。

      views.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}))
      

      forms.py

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-27
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-23
        • 1970-01-01
        • 2012-12-02
        相关资源
        最近更新 更多