Я только начинаю с зефира, так что, если есть более элегантный способ решить проблему, пожалуйста, дайте мне знать.Поля будут варьироваться в зависимости от типа пользователя (студент / персонал)
{
"type": "student",
"name": "Student 1",
"class": "V Std",
"section": "A Class"
}
, если тип Staff
, нам нужно проверить designation
и experience
, пропустить class
и section
{
"type": "staff",
"name": "Staff 1",
"designation": "Professor",
"experience": "2 Year"
}
У меня есть следующая простая модель и схема.
class AddUser(Resource):
def post(self):
content = request.get_json(silent=True)
try:
data = UserSchema().load(content)
print(data)
except ValidationError as err:
return err.messages, 400
class UserSchema(Schema):
type = fields.Str(required=True,validate=OneOf(['student', 'staff'], error='Invalid User Type'), error_messages={'required': 'User type required'})
name = fields.Str(required=True)
class = fields.Str()
section = fields.Str()
designation = fields.Str()
experience = fields.Str()
@post_load
# @pre_load
# @validates_schema
def unwrap_envelope(self, data):
student = {
class: fields.Str(required=True),
section: fields.Str(required=True)
}
staff = {
designation: fields.Str(required=True),
experience: fields.Str(required=True)
}
# Fields are getting updated but it is **not raising the error**
if data['type'] == 'student':
self.declared_fields.update(student)
elseif data['type'] == 'staff':
self.declared_fields.update(staff)
return data