python - 序列化程序调用显示 TypeError:“ListSerializer”类型的对象不是 JSON 可序列化的?
问题描述
我试图在 django GET 请求中调用序列化程序,但它显示一个 TypeError:“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
序列化程序代码如下:
from .models import Members
class MemberSerializers(serializers.HyperlinkedModelSerializer):
class Meta:
model = Members
fields = ('username', 'fullname', 'phone','address','memberid')
# exclude = ['']
pass
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
解决方案
问题是您将序列化程序本身而不是序列化数据发送到响应。您应该将其更改为:
self.data = objects.data
但话虽如此,大部分代码都是完全没有必要的,你绕过了 Django 和 DRF 已经为你做的大部分事情。删除你的 mixin 并使用 ListAPIView。
推荐阅读
- windows - 我的应用程序图标在两个不同文件夹中的缩放比例不同
- git - 在开发过程中如何处理提交到多个分支?
- solr - 在 hybris Solr 中索引文档的几个属性
- javascript - 在Javascript中按下按钮时选择秒
- ms-access - 如何解决 MS Access SQL UPDATE 语法错误
- python - 如何在没有 cmd 的情况下安装 python 模块?
- python - 为什么我只能通过带有 Spark 结构化流的 Tweepy 侦听器的套接字发送变量“文本”?
- c# - 检查某些电子邮件地址时正则表达式“停止”
- azure - Powershell cmdlet 优雅地关闭 azure 虚拟机
- reactjs - 应用程序处于后台状态反应本机时如何清除间隔?