问题描述
这是我的代码
from marshmallow import Schema,fields,ValidationError,INCLUDE
class userschema(Schema):
name = fields.String()
gender = fields.String()
age = fields.Integer(validate=Range(min=18,max=100))
def user_check(user):
try:
validate = userschema().load(user,unkNown=INCLUDE)
print(validate)
except ValidationError as err:
print(err.messages)
user_1 = {"name":"priya","gender":"female","age":20}
user_2 = {"name":"gowtham","gender":"male","age":50}
user_check(user_1)
有什么方法可以验证男性要求的最低年龄为21岁,女性要求的最低年龄为18岁
解决方法
您使用的验证器(validate.Range)。它将为每个用户验证男性和女性。对于您的情况,您需要自定义验证器功能。使用类似这样的东西。
# other imports
from marshmallow import validates_schema
class UserSchema(Schema):
name = fields.String()
gender = fields.String()
age = fields.Integer()
@validates_schema
def validate_age(self,data,**kwargs):
if data['gender'] == 'male':
if data['age'] < 21:
raise ValidationError("Minimum age for males is 21.")
if data['gender'] == 'female':
if data['age'] < 18:
raise ValidationError("Minimum age for females is 18.")
参考: https://marshmallow.readthedocs.io/en/latest/extending.html#schema-level-validation