Adding a lot of serializer to the nested serializer field

serializers.py

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 serializer instances that are valid in the list as below:

 buses_serializers = [bus1, bus2, bus3] # busX means instance of BusOncomingSerializer and they are valid. 

I am trying to add these BusOncomingSerializer instances to a single StopOncomingSerializer instance:

 serializer = serializers.StopOncomingSerializers(data={"idn": 1, "buses": buses_serializers}) 

And I ran is_valid() . However, it increases:

TypeError: BusOncomingSerializer (data = {'idn': 285, 'stops_left': 7}): idn = IntegerField (read_only = True) stops_left = IntegerField (read_only = True) not JSON serializable

Should I not add instances of serializer to the list, is there any other way?


Environment

  • python 3.5.1
  • django 1.9.5
  • django-rest-framework 3.3.3
+2
source share
1 answer

You are transferring data incorrectly to StopOncomingSerializer . Instead of passing bus instances, you should pass the values ​​as a list of dictionaries.

Example Data Format:

 { 'idn': 7, 'buses': [ {'idn':3, 'stops_left': 3}, {'idn': 4, 'stops_left':6} ] } 

In the 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 
+3
source

All Articles