1 回答

TA貢獻1827條經驗 獲得超8個贊
您可以使用@pre_load
將這些字段放在一個extras
字段上(例如),該字段可能包含您想要的任何數據,請參閱有關Extending Schema的 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": "[email protected]"}
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)
以上應該在第一次打印時失敗,在第二次打印時成功。在此處查看演示。
添加回答
舉報