Używam marshmallow 2.0.0rc2 do sprawdzania danych wejściowych na żądaniach HTTP i do ładowania modeli SQLAlchemy do JSON w odpowiedziach HTTP. I natknąłem się na 2 problemy:Wymuszenie `Brak` przy ładowaniu i pomijanie` Brak` na zrzucie
Po pierwsze, podczas ładowania danych z JSON na żądanie HTTP PUT, chcę wypełnić wszystkie brakujące pola jako Brak, aby poprawnie nadpisać dane w SQLAlchemy. Teraz używam następujący kod:
for name, field in schema.fields.iteritems():
if field.missing == ma.missing:
schema.fields[name].missing = None
to działa, ale przypuszczam, że to podsłuch ponieważ jestem brudząc z marshmallow.Field
przykład dołączony do Schema
klasie. Po usunięciu instancji Schema
wszystkie łatane przez nas pola zostaną zablokowane nowym brakującym zamiast domyślnym.
Po drugie, podczas przesyłania danych z SQLAlchemy do JSON wszystkie brakujące pola są rozwiązywane jako Brak, a JSON wypełnione danymi {"key": null, }
. Jest to niepożądane zachowanie i czyszczę je na wyzwalaczu 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
samo jak poprzednie, to działa, ale obejmuje tworzenie jakiś BaseSchema
klasy czarownicę przechodzi tę logikę do wszystkich dziedzicznych klas.
Przeszukałem dokumentację na czas i nie znalazłem żadnego prawidłowego sposobu zamiany tego zachowania, tj. Pomijania pól podczas wysypywania i wypełniania pól przy użyciu polecenia None
podczas ładowania. Czy brakuje mi czegoś lub pianki nie zapewniam takich funkcji?