跳转到主要内容

处理表单集变得更简单。

项目描述

django-superform

不那么糟糕的表单集。

Build Status Documentation Status Package Version Gitter Chat, discuss django-superform with others

如果您想在多个表单之间嵌套,则“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))

不,我们并没有在拥有 FormSetSignupForm 上做任何不同的事情。这样你可以自由地在表单本身实现所有逻辑,并使用像 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

  • #11:修复 CompositeBoundField 以允许通过 form['nested_form']['field'] 直接访问嵌套表单字段。

  • 支持嵌套表单中的 Django 媒体处理。请参阅 #3#5

  • 不要在嵌套表单集中没有错误的情况下将错误列表表示形式填充到超级表单的错误中。请参阅 #5 了解详细信息。

0.2.0

  • Django 1.8 支持。

  • 传递给超级表单的 __init__ 方法的初始值将传递给嵌套表单。

  • ModelFormField 中使用的表单的 empty_permitted 参数将根据字段分配的 required 属性进行设置。

0.1.0

  • 概念验证的初始发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

django-superform-0.3.1.tar.gz (24.2 kB 查看散列

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面