ListField
とDictField
の理解に苦労しています。シリアライザのフィールドとして使いたい。 ListField
があり、これにはおそらく多くのDictField
が含まれます。以下のようにシリアライザを書いてみました:
class StopOncomingSerialier(serializers.Serializer):
idn = serializers.IntegerField(read_only=True)
buses = serializers.ListField(
child=serializers.DictField(
idn=serializers.IntegerField(read_only=True),
stops_left=serializers.IntegerField(read_only=True)
),
read_only=True
)
ドキュメントにはDictField
とListField
がchild
を引数として取ると書かれているので、わかりません。したがって、上記のコードは自然にエラーを発生させました:
TypeError: __init __()が予期しないキーワード引数 'stops_left'を取得しました
{
"idn": 1,
"buses": [
{"idn": 11, "stops_left": 4},
{"idn": 12, "stops_left": 15}
]
}
これを達成する方法は? buses
はリストであり、必要な数の要素を含めることができます。
そうする代わりに、ネストされたシリアライザを使用をすべきだと思います。
フィールドBusSerializer
およびstops_left
を持つidn
を作成します。次に、このシリアライザをStopOncomingSerializer
としてbuses
フィールドとしてmany=True
引数とともに含め、複数のbuses
データを処理します。
class BusSerializer(serializers.Serializer):
idn = serializers.IntegerField(read_only=True)
stops_left = serializers.IntegerField(read_only=True)
class StopOncomingSerialier(serializers.Serializer):
idn = serializers.IntegerField(read_only=True)
buses = BusSerializer(many=True)