Вы можете использовать @pre_load
, чтобы поместить эти поля в поле extras
(например), которое может содержать любые данные, которые вы хотите, см. Документацию Marshmallow о Расширение схемы .
from marshmallow import Schema, fields, ValidationError, pre_load
class PersonSchema(Schema):
name = fields.Str()
email = fields.Str()
extra = fields.Dict()
@pre_load
def unwrap_envelope(self, data, **kwargs):
extra = {}
rest = {}
for k, v in data.items():
if k.startswith('x-'):
extra[k] = v
else:
rest[k] = v
return {'extra':extra,**rest}
sch = PersonSchema()
person_data = {"name": "John Doe", "email": "jdoe@email.com"}
try:
res1 = sch.load({**person_data,"dob": "1980-11-11"})
print(res1)
except ValidationError as err:
print(err.messages)
try:
res2 = sch.load({**person_data,"x-dob": "1980-11-11"})
print(res2)
except ValidationError as err:
print(err.messages)
Вышеупомянутое должно завершиться ошибкой при первом отпечатке и успешным при втором. См. Демонстрацию здесь .