DRF — Как создать ListSerializer из массива serializer

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

У меня есть сериализатор, который я заполняю с помощью функции. Итак, я складываю список этого конкретного сериализатора в массив.

Как мне преобразовать этот массив serializer в ListSerializer, скажем?

Вот мой код:

serializers.py

 class CourseSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.Course
        fields = (
            'name',
)

class ErrorSerializer(serializers.Serializer):
        error = serializers.CharField(max_length=100)
        class Meta:
        fields=(
            'error',
            )

class EqSerializer(serializers.Serializer):
    course = CourseSerializer(many=False)
    error = ErrorSerializer(many=False)
  

api.py

  ...
for c in serializer.validated_data:
            course = models.Course.objects.filter(id=1)#simplifying 
            if len(course)==0:
                error="No Courses Found"
            elif len(course)>1:
                error="Too many courses"
            else:
                x = serializers.CourseSerializer(course[0])
                e = serializers.ErrorSerializer(data={'error':'none'} )
                e.is_valid()
                equate = serializers.EqSerializer(data={'course':x.data,'error':e.data})
                ferr.append(equate) #ferr is my array of  EqSerializer
        resp = serializers.EqSerializer(data=ferr,many=True)#problem is here
  

Как мне превратить это ferr в serializers.EqSerializer список

Комментарии:

1. Можете ли вы объяснить текущую проблему?

2. @JPG когда я пытаюсь преобразовать ferr в ListSerializer, при попытке отправить resp.data ответ происходит сбой

Ответ №1:

На случай, если кто-то столкнется с такой же проблемой, вот решение, просто создайте массив словарей, которые генерируют ListSerializer, и он должен работать

 for c in serializer.validated_data:
            course = models.Course.objects.filter(id=1)#simplifying 
            if len(course)==0:
                error="No Courses Found"
            elif len(course)>1:
                error="Too many courses"
            else:
                x = serializers.CourseSerializer(course[0])
                e = serializers.ErrorSerializer(data={'error':'none'} )
                e.is_valid()

                ferr.append({'course':x.data,'error':e.data}) 
resp = serializers.EqSerializer(data=ferr,many=True)