У меня есть схема, аналогичная приведенной ниже:
my = ngfw_validator()
class network_interface(my.Schema):
type = my.fields.String(required = True, validate = [my.validate.OneOf(['ethernet','bridge','range','bonding','gre'])])
### I want like this if condition
### but, 'type' is <fields.String(default=<marshmallow.missing>, attribute=None, validate=[<OneOf(choices=['ethernet', 'bridge', 'range', 'bonding', 'gre'], labels=[], error=u'Not a valid choice.')>], required=True, load_only=False, dump_only=False, missing=<marshmallow.missing>, allow_none=False, error_messages={u'validator_failed': u'Invalid value.', u'required': u'Missing data for required field.', u'null': u'Field may not be null.', u'invalid_utf8': u'Not a valid utf-8 string.', u'invalid': u'Not a valid string.'})>
### so,, I can't check if condition ...
if type == 'ethernet' :
mode = my.fields.String(required = True, validate = [my.validate.OneOf(['static','dhcp','pppoe'])], allow_none=True)
if mode is None :
zone = my.fields.String(required = True, validate = [my.validate.OneOf(['ANY','Trust','Untrust','DMZ','PAN'])])
....
Вы видели это?Это то, что я хочу сделать.Мне это нравится в любом случае.Тем не менее, я думаю, должен использовать, если условие ..
Так что я пытался .. но ,, не работал для меня.
1) use @ pre_load
class network_interface(my.Schema):
...
@pre_load
def pre_check (self, data):
data['type'] #print 'type' real values, ex) 'ethernet'
# but i can't validate in here
И я так называю
user_data = [{
"ipv4" : "192.168.0.1/255.255.255.0",
"ipv6" : "fc00::0090:0b66:2011/64",
"type" : "Bridge",
"mode" : 'dhcp'
}]
try:
network_interface(many=True).load(user_data)
except my.ValidationError as err:
print err.valid_data
Если вы могли бы научить меня, что делать, Большое спасибо.