我被困在使用两个模式来构建具有内联验证的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