2

したがって、モデルオブジェクトの「id」フィールドのフィールドを持つObjectSerializerがあります(これはModelSerializerです)。何が起こっているかは次のとおりです。

serializer = ObjectSerializer(data=request.DATA)
if serializer.is_valid():
  some_dict = {'field': serializer.data['field']}
  serializer.save()
  return Response(serializer.data, status=status.HTTP_201_CREATED)

応答の「id」フィールドがnull何らかの理由で返されますか? some_dict で行を削除すると、応答で ID が正常に返されます。

ここで何が起こっているのかよくわかりません。どんなポインタでも大歓迎です。

4

1 に答える 1

1

これは興味深いです。プロパティデフォルトの実装はrest_framework.serializers.BaseSerializer data、(プライベート)_dataメンバーを遅延して入力し、それを返します。2 回続けて呼び出すと (基本的にはこれが実行されます)、2 回目は同じ値が返されます。

これを失敗したテスト ケースに減らして、Github でイシューを送信できますか? —それは本当に助かります。

アップデート

ご報告ありがとうございます。

トムがディスカッションで指摘したように、データにアクセスしているときにsave()まだ呼び出されておらidず、設定されていなかったため、問題が発生しています。— 呼び出しをdata後に移動するとsave()、必要な結果が得られます。

それに加えて、 の呼び出しでキャッシュdataがクリアされるように動作が変更されました。save()これは で修正されてmasterおり、次のリリースで修正される予定です。

于 2013-09-19T13:23:28.907 に答える