私は再び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が表示されます。