serializer 调用显示 TypeError: Object of type 'ListSerializer' is not JSON serializable?

Abd*_*eeh 11 python django

我试图在 django GET 请求中调用序列化程序,但它显示了一个类型错误:“ListSerializer”类型的对象不是 JSON 可序列化的如果我在某处出错,请帮助我。提前致谢。

class Member(MemberMixin, APIView):

        serializer_class = MemberSerializers

        def get(self, request, format=None):
            objects = MemberSerializers(Members.objects.all(), many=True)
            self.meta_data = "GET"
            self.module = "Member"
            self.data = objects
            if objects is None:
                self.error = "datas are not found"
                return Response(self.response_obj, status=status.HTTP_404_NOT_FOUND)
            else:
                return Response(self.response_obj, status=status.HTTP_200_OK)
            pass
Run Code Online (Sandbox Code Playgroud)

序列化器代码如下:

from .models import Members


class MemberSerializers(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Members
        fields = ('username', 'fullname', 'phone','address','memberid')
        # exclude = ['']
    pass
Run Code Online (Sandbox Code Playgroud)

MemberMixins 代码如下:

class MemberMixin(object):
    meta_data = dict()
    data = dict()
    error = dict()

    def __init__(self):
        self.meta_data = dict()
        self.data = dict()
        self.error = dict()
        self.json_schema = None
        super().__init__()

    @property
    def response_obj(self):
        resp = dict()
        resp['meta'] = self.meta_data
        if self.error:
            resp['error'] = self.error
        else:
            resp['data'] = {
                'detail': self.data,
            }
        return resp

    pass
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 26

问题是您将序列化程序本身而不是序列化数据发送到响应。您应该将其更改为:

self.data = objects.data
Run Code Online (Sandbox Code Playgroud)

但这就是说,大部分代码是完全没有必要的,您已经绕过了 Django 和 DRF 为您所做的大部分 .he 事情。删除您的 mixin 并使用 ListAPIView。