Я использую marshmallow 2.0.0rc2 для проверки входных данных по HTTP-запросам и загрузки моделей SQLAlchemy в JSON по ответам HTTP. И я наткнулся на 2 проблемы:Принуждение `None` при загрузке и пропуске` None` на дампе
Во-первых, загружая данные из JSON по запросу HTTP PUT, я хочу заполнить все отсутствующие поля как None, чтобы правильно перезаписать данные в SQLAlchemy. Сейчас я использую следующий код:
for name, field in schema.fields.iteritems():
if field.missing == ma.missing:
schema.fields[name].missing = None
Это работает, но я полагаю, что это прослушивается, так как я буду баловаться с marshmallow.Field
например, прикрепленными к Schema
классу. И после удаления Schema
экземпляра все поля, которые мы исправили, будут застревать с новым отсутствующим, а не по умолчанию.
Во-вторых, при сбрасывании данных из SQLAlchemy в JSON все отсутствующие поля разрешены как None, а JSON заполняется данными {"key": null, }
. Это нежелательное поведение, и я очищаю их по триггеру post_dump
.
@post_dump
def clean_missing(self, data):
for key in filter(lambda key: data[key] is None, data):
data.pop(key)
return data
То же, что и предыдущий, он работает, но включает в себя создание некоторой BaseSchema
класса ведьму передает эту логику для всех унаследованных классов.
Я искал документацию и не нашел правильного способа поменять это поведение, т. Е. Пропускает поля при сбросе и заполнении полей None
при загрузке. Я что-то упускаю, или зефир не предоставляет таких функций?