Как получить данные из нескольких вложенных сериализаторов? - PullRequest
0 голосов
/ 22 марта 2019

сериализатору

class CarrGetOrderDetails(serializers.Serializer):
    order = CarrGetOrderDetail(required=False)
    template = CarrGetOrderDetailTemplate(required=False, many=True)
    extra_fields = CarrGetOrderDetailExtraFields(required=False, many=True)

Просмотр файла

class CarrierOrderDetails(APIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request):
        order_id = request.GET['order_id']
        #order_obj = Order.objects.filter(id=order_id)

        obj = self.get_objects(order_id)
        #print('#####',obj)
        serializ = CarrGetOrderDetails(obj, many=True)
        return Response(serializ.data)

    def get_objects(self, order_obj):
        model1 = Order.objects.filter(id=order_obj)
        model2 = OrderTemplate.objects.filter(id=1)
        model3 = OrderExtraField.objects.filter(id=1)
        obj = {'order': model1, 'template': model2, 'extra_fields': model3}
        return obj

здесь я пытаюсь поразить несколько объектов сериализатора, но получил нулевые данные в serializer.data

выход

[
{},
{},
{}
]

1 Ответ

1 голос
/ 22 марта 2019

Вы инициализируете ваш сериализатор с many=True, поэтому он ожидает список объектов. Вы должны либо передать список объектов в качестве первого аргумента конструктору класса сериализатора, либо удалить many=True kwarg.

Кроме того, поскольку вы передаете словарь, я бы использовал data={...} kwarg вместо первого аргумента instance.

В качестве быстрого теста вы можете выполнить следующую модификацию:

obj = self.get_objects(order_id)
serializ = CarrGetOrderDetails(obj, many = True)
obj = self.get_objects(order_id)
serializ = CarrGetOrderDetails(data=[obj], many = True)

Ссылки

...