Adding Many Serializer to A Nested Serializer Field

Обновить

November 2018

Просмотры

177 раз

2

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)

У меня есть экземпляры Serializer, которые действительны в списке, как показано ниже:

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

Я пытаюсь добавить эти BusOncomingSerializerэкземпляры к одному , StopOncomingSerializerнапример с помощью:

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

И я бегу is_valid(). Тем не менее, она поднимает:

Ошибка типа: BusOncomingSerializer (данные = { 'IDN': 285, 'stops_left': 7}): IDN = IntegerField (read_only = True) stops_left = IntegerField (read_only = True) не является JSON - сериализации

Если я не добавить свои экземпляры Serializer со списком, есть другой способ?


Среда

  • питон 3.5.1
  • Джанго 1.9.5
  • Джанго-отдых-основа 3.3.3

1 ответы

3

Вы передаете данные неправильно с StopOncomingSerializer. Вместо того чтобы передавать busэкземпляры, вы должны передать значения в списке словарей.

Пример Формат данных:

{
    '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