0

私は再びDjango REST Frameworkとそのシリアライザに固執しています。Django RESTフレームワーク:ネストされたシリアライザとデシリアライズ

基本的に、私は何をできるようにしたいことはserializers.Serializerインスタンスに次の受信データをスティックです:

data = { 
    "thing_id": 715, 
    "sub_things": [ 
     { 
      "id": 1, 
      "name": "bob" 
     }, 

     { 
      "id": 2, 
      "name": "mike" 
     } 
    ] 
} 

sub_thingsはSubThingSerializer呼ばserializers.ModelSerializerによって処理されます。これはそれがどのように見えるかです。シングの

class SubThingSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = SubThing 
     fields = ('id', 'name') 
     read_only_fields = ('id', 'name') 

シリアル化は、私は今のところ、以下のように処理しましたThingSerializerによって処理されます。

class ThingSerializer(serializers.Serializer): 
    thing_id = serializers.IntegerField() 
    sub_things= SubThingSerializer(many=True) 

を今、私は

serializer = ThingSerializer(data=data) 

は、私のような空のOrderedDictsを得る行うとき:

I ThingSerializerはデータベースに格納する必要はありませんが、データベースのsub_thingsを使用することをお勧めします。これらはDBに書き込まれません。これは、その物が含んでいるものを追跡し、このデータをブラウザクライアントとPythonオブジェクトの間で前後に渡して計算するものです。それをセッションに保存することもできます。

編集1:私は私のThingSerializerの作成方法に追加する必要があるものがあります

ほとんどの場合。だから、究極の質問は、SubThingSerializersにsub_thingデータを渡す正しい構文は何ですか?

編集2:

もう少し掘りました。何らかの理由で空のOrderedDictsがvalidated_dataでThingSerializer.create()に渡されたようです。シリアライザは、serializer.is_valid()を使用して問題なく検証します。私はinitial_dataから必要なデータにアクセスすることができましたが、それは非常に堅実に見えません。

編集3:またsub_things用serializers.ListField()の周りテスト

。 Createメソッド内のvalidated_dataに空のOrderedDictsが表示されます。

答えて

0

最後にこれを考え出しました。私のSubThingSerializerのread_only_fieldsは、データが検証を通過することを防ぎ、空のdictsが作成されるようにしました。存在しないsub_thingデータが私のコードに渡されるのを防ぐためにread_only_fielsを使いましたが、私は別の方法を見つける必要があると思います。

関連する問題