Я использую z3c.form для создания формы в Plone 4.1.4. Мне нужно логическое поле, которое требуется: пользователь должен поставить галочку в поле. (В моем случае пользователь должен согласиться с условиями.)Как создать логическое поле в z3c.form?
Использование required=True
для поля не работает: я могу отправить форму, не установив флажок.
Это то, что мой код выглядит следующим образом:
from five import grok
from plone.directives import form
from zope import schema
from z3c.form import button
from Products.CMFCore.interfaces import ISiteRoot
from Products.statusmessages.interfaces import IStatusMessage
class ITestSchema(form.Schema):
hasApprovedConditions = schema.Bool(
title=u'I agree to the Terms and Conditions.',
required=True,
)
class TestForm(form.SchemaForm):
grok.name('test-form')
grok.require('zope2.View')
grok.context(ISiteRoot)
schema = ITestSchema
ignoreContext = True
@button.buttonAndHandler(u'Send')
def handleApply(self, action):
data, errors = self.extractData()
if errors:
self.status = self.formErrorsMessage
return
IStatusMessage(self.request).addStatusMessage(u'Thanks', 'info')
self.request.response.redirect(self.context.absolute_url())
Форма показывает флажок и этикетку, но нет никаких признаков того, что поле является обязательным и на самом деле это не так: я могу отправить форму без галочка.
Я простирающийся эти известные хорошие наборы:
- http://dist.plone.org/release/4.1.4/versions.cfg
- http://good-py.appspot.com/release/dexterity/1.2?plone=4.1.4
Они придавить z3c.form до версии 2.5.1, но я также попробовал версию 2.6.1.
Что мне не хватает?
Здесь вам нужно использовать ограничение, так как Giacomo предлагает иметь только один действительный ответ (False не подходит). В более общем случае (я понимаю, что это не так) просто нужна проверка, когда True/False приняты, но значение не может быть опущено, я считаю, что schema.Bool (обязательно = True, default = None) в паре с Лучшим решением будет виджет радио (существует четкая возможная проблема виджета флажка, объединяющего False с пропущенным значением, что означает, что виджет флажка является сбоем пользовательского интерфейса, за исключением случая, который вы описываете, к которому он подходит с ограничением добавлено). – sdupton
Характер булевых символов должен быть либо «ложным», либо «истинным», «none» не входит в сферу действия. Обязательный определяет, что необходимо указать значение, которое также имеет место, если пользователь не поставил галочку в поле: это 'false'. Просто мои 2 Øre. –