将对象传递给序列化程序会产生'序列化程序:无法获取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有两个listcreate动作,分别在发出请求和发布请求时触发。所以这只需要:

class CreateMyModel(generics.ListCreateAPIView):
     serializer_class = MyModelSerializer
     queryset = MyModel.objects.all()
     permission_classes = (IsAuthenticated,)
     authentication_classes = (JSONWebTokenAuthentication,)

以上是关于将对象传递给序列化程序会产生'序列化程序:无法获取repr for的主要内容,如果未能解决你的问题,请参考以下文章

您可以使用 ctypes 通过其内存 id 将对象传递给 celery 任务吗?

React:将对象传递给状态

Rails,将对象传递给邮件程序

.NET Remoting,将对象传递给方法

如何将对象传递给另一个数组对象

Vue.js 2.0 Laravel 5.4 将对象传递给应用程序并跨组件全局使用它