这么容易处理表单集。
django-superform的Python项目详细描述
django超型
^{str 1}更少的吸吮表单集。
如果您想在每个 其他。在SuperForm中使用表单集和嵌套表单。这个 SuperForm会照顾它的孩子!
注意
这个包裹还在快速发展中。一些api可能在 未来和它还没有完成的功能。文件还没有 也可以完成,但记录的所有内容都是最新的 应按规定工作。如果没有,请提交一个错误。 所有不向后兼容的更改和新功能都将记录在案 在changelog中。
假设您希望有一个显示和验证窗体和窗体集的视图。 假设您有一个注册表单,用户可以在其中输入多封电子邮件 地址。django为这个用例提供formsets,但是在 风景通常很麻烦。您需要同时验证表单和 手动设置窗体,不能使用django的泛型FormView。所以来了 django superform生效。
这里我们有一个用例的例子。让我们看看 forms.py:
fromdjangoimportformsfromdjango_superformimportSuperModelForm,InlineFormSetFieldfrommyapp.modelsimportAccount,EmailclassEmailForm(forms.ModelForm):classMeta:model=Emailfields=('account','email',)EmailFormSet=modelformset_factory(EmailForm)classSignupForm(SuperModelForm):username=forms.CharField()# The model `Email` has a ForeignKey called `user` to `Account`.emails=InlineFormSetField(formset_class=EmailFormSet)classMeta:model=Accountfields=('username',)
因此,我们将EmailFormSet作为字段直接分配给SignupForm。 这就是它的归属!好的,我如何在 查看?看一看:
defpost_form(request):ifrequest.method=='POST':form=PostForm(request.POST)ifform.is_valid():account=form.save()returnHttpResponseRedirect('/success/')else:form=PostForm()returnrender_to_response('post_form.html',{'form',},context_instance=RequestContext(request))
不,我们不会做任何不同的事情 FormSet在SignupForm上。这样你就可以自由地实现 在它所属的地方使用它自己的形式的逻辑,并使用通用视图,如 CreateView您可以将它们与简单的表单一起使用。想举个例子吗?
fromdjango.views.genericimportCreateViewfrommyapp.modelsimportAccountfrommyapp.formsimportSignupFormclassSignupView(CreateView):model=Accountform_class=SignupFormurlpatterns=patterns('',url('^signup/$',SignupView.as_view()),)
它只是起作用。
更改日志
0.3.1
- SuperForm.composite_fieldsdict不再在窗体之间共享 实例。每个新的表单实例都得到一个深度副本。所以改变了 不会泄漏到同一窗体类的其他实例中。
0.3.0
0.2.0
- Django 1.8支持。
- 给定给超级表单的__init__方法的初始值将得到 传递到嵌套窗体。
- 在^{tt15}中使用的modelforms的empty_permitted参数$ 根据给定给字段的required属性设置。
0.1.0
- 首次发布,提供概念证明。