将对象传递给序列化程序会产生'序列化程序:无法获取repr for
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将对象传递给序列化程序会产生'序列化程序:无法获取repr for相关的知识,希望对你有一定的参考价值。
我在调试器中收到此错误,但我从此端点获得的实际响应是正确的。当我将现有对象从DB传递给序列化程序时,我得到此错误(如下面的代码示例所示)。这是一个创建API视图,它获取POST数据,然后检查该对象是否存在于DB中。如果它确实存在则返回该对象,否则继续创建它。
class CreateMyModel(generics.ListCreateAPIView):
serializer_class = MyModelSerializer
queryset = MyModel.objects.all()
permission_classes = (IsAuthenticated,)
authentication_classes = (JSONWebTokenAuthentication,)
def post(self, request, *args, **kwargs):
try:
obj = MyModel.objects.get(uuid=request.data.get('uuid'))
serializer = self.get_serializer(obj) <-- *serializer: Unable to get repr for <class 'MyModel.serializers.MyModelSerializer'>*
return Response(serializer.data, status=status.HTTP_200_OK)
except ObjectDoesNotExist:
return self.create(request, *args, **kwargs)
class MyModel(models.Model):
uuid = models.UUIDField(primary_key=True)
field1 = models.TextField()
field2 = models.ForeignKey(SomeOtherModel)
def __str__:
return str(self.uuid)
答案
你真的不需要覆盖post方法。 .ListCreateAPIView有两个list
和create
动作,分别在发出请求和发布请求时触发。所以这只需要:
class CreateMyModel(generics.ListCreateAPIView):
serializer_class = MyModelSerializer
queryset = MyModel.objects.all()
permission_classes = (IsAuthenticated,)
authentication_classes = (JSONWebTokenAuthentication,)
以上是关于将对象传递给序列化程序会产生'序列化程序:无法获取repr for的主要内容,如果未能解决你的问题,请参考以下文章