【问题标题】:Django: How to add a form to bounded formset in backend?Django:如何在后端的有界表单集中添加表单?
【发布时间】:2014-05-16 06:14:13
【问题描述】:

基本上,我想做的是获取一个绑定到 request.POST 的表单集,向其中添加一个空白表单,然后返回新的表单集。

class MyView(View):
    def post(self, request):
        MyFormSet = formset_factory(MyForm)
        posted_formset = MyFormSet(request.POST)

        # Append a blank form to posted_formset here
        return render(request, 'mytemplate.html', {'formset': posted_formset})

在 Django 1.6 中有什么干净的方法可以做到这一点吗?现在我有一个解决方法,涉及创建一个新的表单集,其中initial 设置为posted_formset 中绑定的数据,但它有点笨拙,我觉得应该有一个更简单的方法来做到这一点。

【问题讨论】:

  • extra=1 还不够吗?
  • @danihp 不,extra=1 只是给了我没有额外表单的绑定表单集,无论如何它是 formset_factory 中参数的默认值。

标签: django django-forms


【解决方案1】:

这可能是这个问题的重复:Django: How to add an extra form to a formset after it has been constructed?

否则看一下工厂函数的额外参数。您可以在Django Documentation

中获得有关表单集的更多信息

【讨论】:

    【解决方案2】:

    所以似乎没有干净的方法可以做到这一点,因为在表单集绑定到 QueryDict 后,传递给 formset_factory 的额外参数变得无关紧要。在我看来,这是我现在的做法:

    class MyView(View):
        def post(self, request):
            MyFormSet = formset_factory(MyForm)
            posted_formset = MyFormSet(request.POST)
    
            initial = []
            for form in posted_formset:
                data = {}
                for field in form.fields:
                    data[field] = form[field].value()
                initial.append(data)
    
            formset = AuthorFormSet(initial=initial)
            return render(request, 'mytemplate.html', {'formset': formset})
    

    基本上,我将一个表单集绑定到 request.POST,然后遍历它并获取字段值并将它们放入一个字典数组 initial,当我创建一个新表单集时我会传入它(参见 @987654321 @) 最后会有一个额外的空白表单,因为它没有绑定。

    这应该适用于任何表单和表单集。希望它可以帮助某人。

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 2017-01-04
      • 2019-04-11
      • 1970-01-01
      • 2013-03-15
      • 2013-02-06
      相关资源
      最近更新 更多