芹菜编码错误(类型错误('Object of type Response is not JSON serializable'))

Celery EncodeError(TypeError('Object of type Response is not JSON serializable'))

我正在一起使用 Celery - Redis - Django 休息框架。 当我尝试将序列化程序传递给 Django 休息框架内的芹菜延迟时发生错误。

这是视图集

class TestSet(viewsets.ModelViewSet):

    queryset = Test.objects.all()
    serializer_class = ImageSerializer

    def create(self, request, *args, **kwargs):
         serializer = TestSerializer(data=request.data)

         if serializer.is_valid():

            image_uploaded= "static_path"
            
            json_data = base64.b64encode(np.array(image_uploaded)).decode('ascii')
            result = test_call.delay({'image': json_data})
            result = test_call.delay(serializer)

            data = {"task": result.task_id}

            return Response(data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

@shared_task(name="values")
def test_call(decoded_image):
    return decoded_image

我得到的错误是

EncodeError(TypeError('Object of type Response is not JSON serializable'))

更新: 即使我这样做,我仍然会收到错误消息

result = test_call.delay({"task": 1})

@shared_task(name="values")
def test_call(decoded_image):
    return {"task": 2}

这不会回答你的问题,但我不能发表评论(信誉低)。

您似乎正在尝试 JSON 序列化显然 JSON 不可序列化的内容。根据名称,它是某种图像数据。您可以尝试另一个应该 JSON 可序列化的工作流程,例如:

一个例子:

  1. 首先将图像保存在以后可以访问的地方,然后在序列化程序中添加位置(S3 存储桶,然后 link 到图像)
  2. 在您的 celery 任务中,根据该位置获取图像数据

第二个例子:

  1. 将图像数据转换为JSON可序列化的内容,如 Base64 图像字符串