将许多串行器添加到嵌套的序列化程序字段 [英] Adding Many Serializer to A Nested Serializer Field
问题描述
class BusOncomingSerializer(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 = BusOncomingSerializer(many=True)
我有我的串行器实例有效一个列表如下:
I have my serializer instances which are valid in a list as below:
buses_serializers = [bus1, bus2, bus3]
# busX means instance of BusOncomingSerializer and they are valid.
我正在尝试添加这些 BusOncomingSerializer
到一个 StopOncomingSerializer
实例:
I am trying to add these BusOncomingSerializer
instances to a single StopOncomingSerializer
instance by:
serializer = serializers.StopOncomingSerializers(data={"idn": 1, "buses": buses_serializers})
而且我运行 is_valid()
。然而,它引起:
And I run is_valid()
. However, it raises:
TypeError: BusOncomingSerializer(data = {'idn':285,'stops_left' :7}):idn = IntegerField(read_only = True)stops_left = IntegerField(read_only = True)不是JSON可序列化
TypeError: BusOncomingSerializer(data={'idn': 285, 'stops_left': 7}): idn = IntegerField(read_only=True) stops_left = IntegerField(read_only=True) is not JSON serializable
没有添加我的序列化器实例与列表,是否有另一种方式?
Should I not add my serializer instances with a list, is there another way?
- python 3.5.1
- django 1.9.5
- django-rest-framework 3.3。 3
推荐答案
您正在将数据错误传递给 StopOncomingSerializer
。
You are passing the data incorrectly to StopOncomingSerializer
. Instead of passing bus
instances, you should pass the values as list of dictionaries.
示例数据格式,而不是通过总线
实例,您应该将值作为字典列表传递。 :
Sample Data format:
{
'idn': 7,
'buses': [
{'idn':3, 'stops_left': 3},
{'idn': 4, 'stops_left':6}
]
}
在Python Shell中:
In [5]: data = {'idn': 7, 'buses': [{'idn':3, 'stops_left': 3}, {'idn': 4, 'stops_left':6}]}
In [6]: s1 = StopOncomingSerialier(data=data)
In [7]: s1.is_valid()
Out[7]: True
这篇关于将许多串行器添加到嵌套的序列化程序字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!