J'ai du mal à comprendre comment gérer les champs inconnus lorsque le Schema
reçoit une liste d'objets pour validation. Je suis arrivé à ce jour:marshmallow `validates_schema` pour rejeter les champs inconnus avec` 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)
Mais cela ne fonctionne évidemment pas, comme le validateur est couru pour tous les éléments de la liste à chaque fois. Par conséquent, la première erreur sera pris et retourné sur tous les points:
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']}}
je tentais de penser à un moyen d'obtenir que le seul élément de original_data
correspondant à l'argument data
et valider que celui-là, mais je ne peut pas vraiment faire cela, car les articles n'ont pas d'identifiant, ou un champ qui les rendrait consultables ...
Ai-je raté quelque chose? Y a-t-il une solution à cela?