DRF - Как создать ListSerializer из массива сериализатора - PullRequest
0 голосов
/ 02 апреля 2019

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

Как мне преобразовать этот массив сериализатора в 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 Ответ

0 голосов
/ 03 апреля 2019

Если кто-то столкнется с той же проблемой, вот решение, просто создайте массив словарей, которые генерируют 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)
...