Django DRF PUT请求图像字段

Django DRF PUT请求图像字段,django,django-rest-framework,put,Django,Django Rest Framework,Put,我正在使用Django中的ImageField上传图像。当我获取要在前端显示的数据时,将图像保存在数据库中后,我以以下格式获取图像: {"pk":5,"employee_image":"/media/emp_temp_mast/5.png","first_name":"TEST",} 在更改前端上的数据后,我发送了一个PUT请求,请求表格中的相应条目: {"pk":5,&qu

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

{"pk":5,"employee_image":"/media/emp_temp_mast/5.png","first_name":"TEST",}
在更改前端上的数据后,我发送了一个PUT请求,请求表格中的相应条目:

{"pk":5,"employee_image":"/media/emp_temp_mast/5.png","first_name":"DATA CHANGED",}
但是,在发出请求后,我收到以下错误:

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

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

由@Ross Rogers提出的建议奏效了,但我觉得它可能会变得有点乏味,因为我们希望每个客户端应用程序都意识到,他们必须在他们打算提出的每个更新请求上使用Nuke 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)
为了实现这一点,我对后端接收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请求

如果您只想更改不包括实际
员工\u图像
字段的部分数据,然后使用
PATCH
方法,不要包含不想更新的字段:
fetch('https://foo.bar/Baz/“,{method:'PATCH',body:”{“pk”:5,“first_name:“DATA CHANGED”}”)
。这只是一个例子,在这种情况下,我需要发出put请求。需要将数据添加到一个重复的表中并从中删除。我的问题基本上是,在从数据库获取数据后,对imagefield执行put请求的最有效方式是什么?在发送JSON的页面上单击
imagefield
,然后使用all其他字段。然后执行
PATCH
。例如
let send_data={…data};delete send_data['employee_image'];fetch([…]方法:'PATCH')