繁体   English   中英

Django DRF 无法发送带有图像字段的 PUT 请求

[英]Django DRF Unable to send PUT request with Image Field

我在 React 中有一个表单,我通过它发送一些包含 ImageField 的数据。 我能够执行 POST 请求,并且数据已成功发送到 Django 后端。 但是,当我尝试修改数据时,我得到了 employee_image: `

[“提交的数据不是文件。请检查表单上的编码类型。”]

这是 GET 请求中出现的数据:

[ { "id": 2, "product_name": "XYZ", "product_description": "XYZ", "product_price": "12.00", "product_unit_weight": "120.00", "product_unit_weight_units": "GM", "product_type ": "CPG", "product_image": "http://192.168.29.135:8000/media/product_images/xyz.png" },

这是我的 models.py 文件:

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

    def post(self, request, *args, **kwargs):
        product_name = request.data['product_name']
        product_description = request.data['product_description']
        product_price = request.data['product_price']
        product_unit_weight = request.data['product_unit_weight']
        product_unit_weight_units = request.data['product_unit_weight_units']
        product_type = request.data['product_type']
        product_image = request.data['product_image']
        Product.objects.create(product_name=product_name, product_description=product_description, product_price=product_price, product_unit_weight=product_unit_weight, product_unit_weight_units=product_unit_weight_units, product_type=product_type, product_image=product_image)
        return Response({'message':'Product created successfully'}, status=200)

    def update(self, request, *args, **kwargs):
        print('Put method running')
        pk = self.kwargs.get('pk')
        product = get_object_or_404(Product.objects.all(), pk=pk)
        print(product)
        if (product.product_image.startswith('http')):
            img_name = dataDict["product_image"].split("/")[-1]
            product_img_temp = ContentFile(request.get(dataDict["product_image"]).content, name=img_name)
            dataDict['product_img'] = product_img_temp
        serializer = ProductSerializer(product, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我尝试按照此响应并使用 update() 编辑我的 models.py,如上所示。 但我得到的错误是:

'产品' object 没有属性 '数据'

此外,当我在 update() 方法中打印产品时,我只打印了产品名称,而不是字段的 rest。 我不明白为什么我会遇到这个问题。 任何帮助将非常感激。 提前致谢。

`

这是您必须克服的几个问题。

  1. 从客户端(React),您需要制作 FormData 来发送图像或文件。
  2. 在 python 中,每个 object 都有一些特殊的魔术方法,其中之一是 ar str ,该方法返回字符串。 当我们打印 object 时,除了打印完整的 object 数据之外,此str方法字符串被打印。 如果要打印完整数据,则需要使用print(product.__dict__)

您可以使用“patch”方法来发出您的请求,而不是“put”请求。 补丁使用 partial_update() function 因此,您还需要定义一个 partial_update() function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM