私はマシュマロ2.0.0rc2 を使用して、HTTP 要求の入力データを検証し、HTTP 応答で SQLAlchemy モデルを JSON にロードしています。そして、私は2つの問題に遭遇しました:
まず、HTTP PUT 要求で JSON からデータをロードしているときに、欠落しているすべてのフィールドを 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
、ロード時にフィールドに入力します。私は何か不足していますか、それともマシュマロはそのような機能を提供していませんか?