Ich habe Schwierigkeiten zu verstehen, wie mit unbekannten Feldern umzugehen ist, wenn die Schema
eine Liste von Objekten zur Validierung übergeben wird. Ich habe bisher:Marshmallow `validates_schema`, um unbekannte Felder mit` pass_many = True` abzulehnen
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)
Aber das offensichtlich nicht funktioniert, da der Validator für alle Elemente in der Liste läuft jedes Mal. Daher ist der erste Fehler wird auf allen Artikeln gefangen und zurückgeschickt werden:
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']}}
ich eine Art und Weise zu denken versuche nur das einzelne Element erhalten von original_data
zum data
Argumente entsprechen, und bestätigt nur, dass man, aber ich kann das nicht wirklich tun, da Elemente keine ID oder Feld haben, das sie durchsuchbar machen würde ...
Fehle ich etwas? Gibt es dafür eine Lösung?