0
當Schema
傳遞一個用於驗證的對象列表時,我很難理解如何處理未知字段。我走到這一步:棉花糖`validates_schema`用`pass_many = True`拒絕未知字段
class MySchema(Schema):
# fields ...
@marshmallow_decorators.validates_schema(pass_original=True)
def check_unknown_fields(self, data, original_data):
if isinstance(original_data, list):
for dct in original_data:
self._assert_no_unknown_field(dct)
else:
self._assert_no_unknown_field(original_data)
def _assert_no_unknown_field(self, dct):
unknown = set(dct.keys()) - set(self.fields)
if unknown:
raise MarshmallowValidationError('Unknown field', unknown)
但是,這顯然是行不通的,因爲驗證器運行列表中的每一次的所有項目。因此,第一個錯誤會被抓住,並在所有項目返回:
items = [
{'a': 1, 'b': 2, 'unknown1': 3},
{'a': 4, 'b': 5, 'unknown2': 6},
]
errors = MySchema(many=True).validate(items)
# {0: {'unknown1': ['Unknown field']}, 1: {'unknown1': ['Unknown field']}}
我試圖想辦法來對應data
說法從original_data
只能得到單一的項目,只有驗證,但我不能真的這樣做,因爲物品沒有ID或字段,這將使他們可搜索...
我錯過了什麼嗎?有針對這個的解決方法嗎?