Plone z3c.form.GroupForm со встроенной проверкой

Я застрял с использованием двух схем для создания 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.

Вариант использования, который мне нравится использовать, следующий: форма, которая имеет поля схемы A и схемы B, каждое на вкладке, соответственно. Затем обработка действия формы кодируется вручную и будет заботиться об обработке базовых типов контента. Другими словами: никакая ловкость "позитивной коннотации" не должна / не должна использоваться.

Но мне нравится иметь встроенную проверку согласно подсказкам схемы и адаптерам, которые я зарегистрировал для схем.

1 ответ

Задача решена. Группы 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
Другие вопросы по тегам