我有一个问题,FormEncode 不承认验证器设置了 if_missing。它不断为该字段返回“缺少错误”错误。
我有一个看起来像这样的架构
class ABCSchema(Schema):
allow_extra_fields = True
filter_extra_fields = True
primary_surname = validators.UnicodeString(not_empty=True)
mailing_address_1 = validators.UnicodeString(not_empty=True)
mailing_address_2 = validators.UnicodeString()
mailing_city = validators.UnicodeString(not_empty=True)
mailing_state = national.USStateProvince(not_empty=True)
mailing_zip = national.USPostalCode(not_empty=True)
billing_address_is_same_as_mailing = validators.StringBool(if_empty=False, not_empty=False)
billing_address_1 = validators.UnicodeString(if_missing=None)
billing_address_2 = validators.UnicodeString(if_missing=None)
billing_city = validators.UnicodeString(if_missing=None)
billing_state = national.USStateProvince(if_missing=None)
billing_zip = national.USPostalCode(if_empty=None, not_empty=False)
special_instructions = validators.UnicodeString()
有问题的验证器是 billing_zip。
这个想法是用户可以选择翻转 billing_address_is_same_as_mailing 标志。这将禁用阻止提交这些字段的帐单地址字段。
提交表单后,请求具有以下值
NestedMultiDict([('primary_surname', 'Something'), ('mailing_address_1', '81 turnbull St'), ('mailing_address_2', ''), ('mailing_city', 'Tampa'), ('mailing_state', 'NE'), ('mailing_zip', '98754'), ('billing_address_is_same_as_mailing', 'True'), ('special_instructions', ''), ('submit', 'Submit')])
这通过以下数据和错误字典进行验证。
{'special_instructions': '', 'billing_city': None, 'mailing_city': 'Budd Lake', 'primary_surname': 'Something', 'billing_address_is_same_as_mailing': 'True', 'billing_state': None, 'mailing_address_1': '81 turnbull St', 'billing_zip': None, 'mailing_zip': '07828', 'mailing_state': 'NE', 'billing_address_2': None, 'submit': 'Submit', 'billing_address_1': None, 'mailing_address_2': '8 Locust St'}
{'billing_zip': 'Missing value'}
我已经尝试过各种组合的 if_empty、if_missing 和 not_empty,但如果 billing_zip 丢失,我似乎无法让验证器通过。但是,它似乎并没有抱怨其他计费字段。
我错过了什么?