2016-12-18 6 views
0

オブジェクトが正常に保存された後にserializer.dataを返す共通のパターンがあります。これ応答(serializer.data)のモデルオブジェクトを返すDRF

raise TypeError(repr(o) + " is not JSON serializable") 

いくつかの解決策:データを他の

  1. 実行to_internal_valueは(例えばPrimeryKeyRelatedFieldのように)Djangoのオブジェクトを返す場合は、次にResponseこのエラーを生成します道、すなわちFooSerializer(data=serializer.data)

  2. 手動でそれを置き換える、すなわちserializer.data['field'] = serializer.data['field'].pk

  3. どこかで継承何かに(それがmodels.Modelのサブクラスだかどうかを知ることがisinstanceための方法がありますしない限り、おそらく不可能)応答が__str__表現にDjangoのオブジェクトと、デフォルトを受け入れることができるように

  4. は、[全体]を返しません。オブジェクト。もう一方の側には、送信したデータのコピーが含まれているので、サーバーによって変更されていないフィールドを返す必要はありません。

これらのソリューションの中で最もPythonのものがありますか、ここに記載されていないものがありますか?

答えて

0

There is a common pattern to return serializer.data after an object has been successfully saved.

いいえ、これは一般的なアンチパターンです。

異なるserializer.validated_dataを返します。

+0

申し訳ありませんが、私は 'serializer.data'の代わりに' serializer.validated_data'を使用するべきですか? – dtgq

+0

Djangoオブジェクトを保存している場合は、逆シリアル化しています。 http://www.django-rest-framework.org/api-guide/serializers/#deserializing-objectsを参照してください。 – Linovia

関連する問題