我被困在使用两个模式来构建具有内联验证的z3c.GroupForm:

https://pypi.python.org/pypi/z3c.form#group-forms之后,我做了:

from plone.directives.dexterity import AddForm
from z3c.form import field
from z3c.form import group, form

class CustomerGroup( group.Group ):
    label = u'Customer'
    fields = field.Fields(ICustomer, prefix='customer')

class CustomerRegistrationAddForm(group.GroupForm, AddForm):
    ignoreContext = True
    fields = field.Fields(IEmailUser).omit('customer')
    groups = (CustomerGroup,)

这可行。但这给了我真正的渲染效果,并且没有内联验证。
我试图包括plone.autoform中的混音,但是这些似乎不兼容-> MRO错误。

我很确定我错过了一些事情。 Plone中有plone.app.z3cform和其他包装,用于z3c.form。但是我没有找到将它们用于z3c.groups的示例,因此我尝试了基本的z3c变体。

我要实现的用例如下:一个表单,在选项卡中分别具有Schema A和Schema B的字段。然后,对表单操作处理进行手动编码,并将处理基础内容类型的处理。换句话说:将不会使用任何灵巧的“积极内涵”魔术。

但是我希望根据我为架构注册的架构提示和适配器进行内联验证。

最佳答案

问题解决了。 Z3c的组现在在Plone中称为字段集。
以下是技巧。

from plone.autoform.form import AutoExtensibleForm
from plone.supermodel import model
from z3c.form import form
from plone.autoform import directives

class ICustomerRegistration( IEmailUser, ICustomer ):
    model.fieldset('EmailUser',
        label=_(u"EMail User"),
        fields=['email', 'firstname', 'lastname', ]
        )

    model.fieldset('Customer',
        label=_(u"Customer"),
        fields=['enterprise',
                'street',
                'house_number',
                'postal_code',
                'city',
                ]
        )

class CustomerRegistrationAddForm(AutoExtensibleForm, form.Form):
    ignoreContext = True
    schema = ICustomerRegistration

09-26 16:40