将许多串行器添加到嵌套的序列化程序字段 [英] Adding Many Serializer to A Nested Serializer Field

查看:117
本文介绍了将许多串行器添加到嵌套的序列化程序字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆