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

时间:2018-02-15 10:28:27

标签: plone dexterity plone-4.x

假设我们的灵活性内容类型包含两个字段:field_afield_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。 :)

这里有解决方案吗?如何在验证器中获取表单/上下文/请求/其他字段值?

1 个答案:

答案 0 :(得分:2)

解决方案是使用invariant代替constrainthttps://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."))