class Item(Schema):
number = fields.Int(required=True)
other_number = fields.Int(required=True)
collection = Item.load([{'number': '3', 'other_number': '4'}, {'number': '', 'other_number': '3'}], many=True)
Is there a way I can get:
collection == [{'number': 3, other_number: 4}]
That is make a best effort when serializing?
I've tried Nested fields, with validation error an getting valid_data, but if one field is valid, you get something like:
[{'number': 3, 'other_number': 4}, {'other_number': 3}]
Which is not what I want, that is I would like to load a collection ignore those that don't validate.
You could take advantage of the fact that ValidationError.messages is keyed by index when many=True to filter the valid data.
On marshmallow 3 it would look something like:
from marshmallow import Schema, fields, ValidationError
class Item(Schema):
number = fields.Int(required=True)
other_number = fields.Int(required=True)
try:
Item().load(
[{"number": "3", "other_number": "4"}, {"number": "", "other_number": "3"}],
many=True,
)
except ValidationError as error:
filtered = [
datum for i, datum in enumerate(error.valid_data) if i not in error.messages
]
print(filtered)
# [{'number': 3, 'other_number': 4}]
Most helpful comment
You could take advantage of the fact that
ValidationError.messagesis keyed by index whenmany=Trueto filter the valid data.On marshmallow 3 it would look something like: