Plone:根据其他字段的值验证字段
Plone: Validate field based on other field's value
假设我们有一个包含两个字段的灵巧内容类型:field_a
和 field_b
。
在编辑模式中:
- 如果
field_a
选择了 category_1
值,则不需要 field_b
- 如果
field_b
选择了其他值,则需要 field_b
这里似乎无法进行简单的验证。我试过了:
from zope.interface import Invalid
def validate_field_b(value):
# value is a string here. I can't create a condition based on field_a.
raise Invalid(_(u"Value in field b is required."))
此处使用:
field_b = schema.TextLine(
title=_(u"Some field B"),
required=False,
constraint=validate_field_b
)
结果是field_b
一直需要。 :)
这里有什么解决办法吗?如何在我的验证器中获取表单/上下文/请求/其他字段值?
解决方案是使用 invariant
而不是 constraint
:
https://docs.plone.org/external/plone.app.dexterity/docs/advanced/validators.html#invariants
@invariant
def validate_field_b(data):
if data.field_a != 'category_1' and data.field_b is None:
raise Invalid(_("Missing input for field_b."))
假设我们有一个包含两个字段的灵巧内容类型:field_a
和 field_b
。
在编辑模式中:
- 如果
field_a
选择了category_1
值,则不需要field_b
- 如果
field_b
选择了其他值,则需要field_b
这里似乎无法进行简单的验证。我试过了:
from zope.interface import Invalid
def validate_field_b(value):
# value is a string here. I can't create a condition based on field_a.
raise Invalid(_(u"Value in field b is required."))
此处使用:
field_b = schema.TextLine(
title=_(u"Some field B"),
required=False,
constraint=validate_field_b
)
结果是field_b
一直需要。 :)
这里有什么解决办法吗?如何在我的验证器中获取表单/上下文/请求/其他字段值?
解决方案是使用 invariant
而不是 constraint
:
https://docs.plone.org/external/plone.app.dexterity/docs/advanced/validators.html#invariants
@invariant
def validate_field_b(data):
if data.field_a != 'category_1' and data.field_b is None:
raise Invalid(_("Missing input for field_b."))