我正在尝试实现一个只使用用户输入编辑的表单的表单集。目前我只能添加我目前宣布的所有表格,但我只需要其中一种。
我这样做:
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()函数的模板中使用它时,它只打印出第三个表单。我正试图避免为此创建另一个类......我觉得它做得不对。
答案 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。