Django DRF PUT请求ImageField

问题描述

我正在使用Django中的ImageField上传图像。当我获取要在前端显示的数据时,将图像保存在数据库中之后,我以以下格式获取图像:

{"pk":5,"employee_image":"/media/emp_temp_mast/5.png","first_name":"TEST",}

更改前端的数据后,我以以下形式发送对相应条目的PUT请求:

{"pk":5,"first_name":"DATA CHANGED",}

但是发出请求后出现以下错误

employee_image: ["The submitted data was not a file. Check the encoding type on the form."]

我应该如何从前端调用PUT请求。

解决方法

@Ross Rogers的建议奏效了,但我觉得它可能会有些乏味,因为我们希望每个客户端应用程序都意识到,他们必须在打算发出的每个UPDATE请求上取消ImageField。客户端应该能够进行这种抽象,并且不必担心ImageField的处理。

为此,我对后端接收ImageField的视图进行了以下更改。

class Emp_DetailView(APIView):

    def get_object(self,pk):
        try:
            return db_data
        except Emp_Mast.DoesNotExist:
            raise Http404

    def put(self,request,pk,format=None):
        db_data = self.get_object(pk)

        if(db_data["employee_image"] and db_data["employee_image"].startswith('http'))):
            img_name = dataDict["employee_image"].split("/")[-1]
            emp_img_temp = ContentFile(requests.get(dataDict["employee_image"]).content,name=img_name)
            dataDict["employee_image"] = emp_img_temp

        serializer = Emp_Mast_Serializer(db_data,data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

在图像URL上发送GET请求,然后将结果保存为可用于发送PUT请求的文件格式