首页 > 解决方案 > 无法使用 post 方法中的另一个函数序列化 request.data。使用 Post 请求。DRF

问题描述

我对 Django 和 DRF 很陌生。我有一个带有 Image 和 ForeignKey 字段的模型。

class Image(models.Model):
    image = models.ImageField(blank=False, null=False)
    predicted_result = models.ForeignKey(PredictedIllness, on_delete=models.CASCADE)

序列化器

class ImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Image
        fields =['image','predicted_result']

还有一个观点

class UploadImage(APIView):
    def post(self, request, format=None):
        serializer = ImageSerializer(data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response('Classified', status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def classify_image(self, image_file, image):
        image = open_image(image)
        pred_class, pred_idx, outputs = fastAi_learner.predict(image)
        print(pred_class.data.item())
        return pred_class.data.item()

因此,当我使用 POST 请求进行拍摄时,一切正常并返回 Response: 'Classified' withStatus 201。

但是,我想做的是自己对图像进行分类,使用分类图像功能。

def post(self, request, format=None):
    try:
        im = pilImage.open(request.data['image'])
        if im.load():
            predicted_condition = self.classify_image(image_file=request.data['image'].name,
                                                      image=request.data['image'])
            request.data['predicted_result'] = predicted_condition
            serializer = ImageSerializer(data=request.data, partial=True)
            if serializer.is_valid():
                serializer.save()
                return Response(1, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    except IOError:
        return Response('problems with image', status=status.HTTP_400_BAD_REQUEST)

出于某种原因,当我以完全相同的请求从 Postman 拍摄时,我收到以下 400 响应:

{
    "image": [
        "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
    ]
}

什么可能导致抛出此错误?因为我发送完全相同的图像。以及如何正确地将自定义数据(不是来自请求)添加到序列化程序本身/请求?

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读