Plone:根据其他字段的值验证字段



假设我们有一个具有两个字段的敏捷内容类型: field_afield_b

在编辑模式下:

  • 如果field_acategory_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."))

相关内容

  • 没有找到相关文章

最新更新