簡體   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