Django formset - 创建一个只有一个表单的formset

时间:2016-01-18 02:59:27

标签: python django forms

我正在尝试实现一个只使用用户输入编辑的表单的表单集。目前我只能添加我目前宣布的所有表格,但我只需要其中一种。

我这样做:

    def oneForm(request):
Formset = formset_factory(testingForms)
form1 = Formset()
print(form1)

这是我的forms.py:

class testingForms(forms.Form):
first = forms.DecimalField()
second = forms.CharField(max_length = 4)
third = forms.CharField(max_length = 1)

我希望它只是填充第三种形式。因此,当我在带有as_table()函数的模板中使用它时,它只打印出第三个表单。我正试图避免为此创建另一个类......我觉得它做得不对。

1 个答案:

答案 0 :(得分:2)

如果您只需要1个表单,为什么要使用formset而不是单个表单?

如果您真的这样做,只需将max_num和min_num以及extra设置为1并验证它们。

Formset = formset_factory(testingForm, max_num=1, min_num=1, extra=1, validate_min=True, validate_max=True)

编辑:这是一个解决方案。

forms.py

class FormA(forms.Form):
    first = forms.DecimalField()
    second = forms.CharField(max_length = 4)

class FormB(forms.Form):
    third = forms.CharField(max_length = 1)

views.py

from my_app.forms import FormA, FormB
from django.forms import formset_factory
from django.shortcuts import render_to_response, RequestContext

def your_view(request):
     form = FormA()
     # figure out how many instances of the third field you want
     number_of_forms = 3 # however you like
     FormsetFactory = formset_factory(FormB, min_num=number_of_forms, max_num=number_of_forms,extra=0,validate_min=True,validate_max=True)
     formset = FormsetFactory()
     if request.POST:
         # do something with post

     return render_to_response('your_template.html',{'form':form,'formset':formset}, RequestContext(request))

您需要在确定所需数量后动态分配formset_factory生成器。

正确渲染表单集还有很多,所以请看一下documentation