在多个字段上使用表单小组件验证程序

时间:2015-08-19 01:23:15

标签: plone z3c.form

我已为我的架构字段编写了自定义验证程序,如下面的文档中所示: http://docs.plone.org/develop/plone/forms/z3c.form.html#form-widget-validators

enter image description here

我的问题是,如果我想在几个不同的领域使用相同的验证器,那可能吗?它似乎没有用。我想写一下:

# Set conditions for which fields the validator class applies
validator.WidgetValidatorDiscriminators(PhoneNumberValidator, field=IZohoContactForm['phone_number'])
validator.WidgetValidatorDiscriminators(PhoneNumberValidator, field=IZohoContactForm['another_phone_field'])

3 个答案:

答案 0 :(得分:0)

作为一种解决方法,我编写了两个具有不同名称的相同验证器,这些验证器违反了DRY原则,但对于这个原则我似乎并不多......

答案 1 :(得分:0)

也可以为field参数传递字段 type (请参阅:https://docs.plone.org/develop/addons/schema-driven-forms/customising-form-behaviour/validation.html#field-widget-validators):validator.WidgetValidatorDiscriminators(MyListValidator, field=schema.List)

在以上示例中,验证器应用于类型为schema.List的所有字段

答案 2 :(得分:0)

这是一个老问题,但是我最近才遇到这个问题,这是我的方法:

  1. 为要验证的字段设置架构接口。
class ICaptchaSchema(model.Schema):
    captcha = schema.TextLine(
            title=_('security_check', default="Security check"),
        )
  1. 在表单模式界面中使用该字段:
class IFormSchema(model.Schema):
    captcha1 = ICaptchaSchema['captcha']
    captcha2 = ICaptchaSchema['captcha']

  1. 为第一个架构iterface注册表单小部件验证器:
validator.WidgetValidatorDiscriminators(YourCustomValidator,
                                        field=ICaptchaSchema['captcha'])

将修改所有“验证码”字段。

问候。