处理表单集变得更简单。
项目描述
django-superform
不那么糟糕的表单集。
如果您想在多个表单之间嵌套,则“SuperForm”绝对非常出色。在SuperForm中使用表单集和嵌套表单。SuperForm将负责其子表单!
想象一下,您想要一个视图来显示和验证一个表单和一个表单集。让我们假设您有一个注册表单,用户可以输入多个电子邮件地址。Django为此用例提供了表单集,但在视图中处理这些通常相当麻烦。您需要手动验证表单和表单集,并且不能使用Django的通用FormView。因此,django-superform就派上用场了。
这里有一个用例的示例。让我们看一下forms.py
from django import forms
from django_superform import SuperModelForm, InlineFormSetField
from myapp.models import Account, Email
class EmailForm(forms.ModelForm):
class Meta:
model = Email
fields = ('account', 'email',)
EmailFormSet = modelformset_factory(EmailForm)
class SignupForm(SuperModelForm):
username = forms.CharField()
# The model `Email` has a ForeignKey called `user` to `Account`.
emails = InlineFormSetField(formset_class=EmailFormSet)
class Meta:
model = Account
fields = ('username',)
因此,我们将EmailFormSet直接分配给SignupForm字段。这就是它的位置!那么如何在视图中处理这个组合表单?请看以下内容
def post_form(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
account = form.save()
return HttpResponseRedirect('/success/')
else:
form = PostForm()
return render_to_response('post_form.html', {
'form',
}, context_instance=RequestContext(request))
不,我们并没有在拥有 FormSet 的 SignupForm 上做任何不同的事情。这样你可以自由地在表单本身实现所有逻辑,并使用像 CreateView 这样的通用视图,就像你使用简单表单时一样。想看一个例子吗?
from django.views.generic import CreateView
from myapp.models import Account
from myapp.forms import SignupForm
class SignupView(CreateView):
model = Account
form_class = SignupForm
urlpatterns = patterns('',
url('^signup/$', SignupView.as_view()),
)
它只需这样做。
文档
完整的文档可在 Read The Docs 上找到:https://django-superform.readthedocs.org/
由 Gregor Müllegger 开发,并与 Team23 合作。
变更日志
0.3.1
SuperForm.composite_fields 字典不再在表单实例之间共享。每个新的表单实例都会得到一个深度副本。因此,对其的更改不会泄露到相同表单类的其他实例中。
0.3.0
0.2.0
Django 1.8 支持。
传递给超级表单的 __init__ 方法的初始值将传递给嵌套表单。
在 ModelFormField 中使用的表单的 empty_permitted 参数将根据字段分配的 required 属性进行设置。
0.1.0
概念验证的初始发布。
项目详情
django-superform-0.3.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 149421eaf0cad3571ed8eb159d95a6020dce8bbb93717bc4303fe804c0164aba |
|
MD5 | a00c00cd094d665a8342b820823b1abe |
|
BLAKE2b-256 | c2a8e21b160b66031439157a73c2f84b94d2981f6e5c85fcbcfb4bd11580c3d8 |