首页 > 解决方案 > DRF - 如何从序列化器数组创建 ListSerializer

问题描述

我有一个使用函数填充的序列化程序。所以我将这个特定序列化程序的列表堆叠在一个数组上。

我如何将这个序列化器数组转换为 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列表

标签: djangodjango-rest-framework

解决方案


如果有人遇到同样的问题,这里是解决方案,只需创建一个生成 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)

推荐阅读