簡體   English   中英

通過 Django REST API 刪除對象

[英]delete object through Django REST API

我正在嘗試使用 Django REST API 刪除“產品”對象,但不知道如何執行此操作。

序列化器:

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ('id', 'product_name', 'measure', 'barcode')

我可以使用此功能創建產品

def create_product(request):
    data = request.POST
    serializer = ProductSerializer(data=data)
    if serializer.is_valid():
        serializer.save()

但是不知道怎么刪除

沒有 serializer.delete() 方法。

您可以使用查詢集來做到這一點:

@api_view(["DELETE"])
def product_delete_rest_endpoint(request, product_id):
    Product.objects.get(id=product_id).delete()
    return Response()

如果您的視圖(集)繼承自DestroyModelMixin或繼承自它的視圖集,例如ModelViewSet ,則支持開箱即用的 http DELETE 您可以使用 curl 對其進行測試,例如curl -X DELETE "http://localhost:8000/your-api/products/<product-id>"

首先,您應該知道如何使用 django rest_framework 中的 Router 和 ModelViewSet 以及 GenericViewSet 類,而不是 Product 應用程序,假設您有 Customer 應用程序。 你應該從viewsets.ModelViewSet或viewsets.GenericViewSet和mixins.DestroyModelMixin在views.py中繼承你的類視圖集,就像打擊一樣

class CustomerViewSet(viewsets.GenericViewSet, mixins.DestroyModelMixin):

或者

class CustomerViewSet(viewsets.ModelViewSet):

並像這樣為該視圖集定義 serilaizer 類

class CustomerViewSet(viewsets.GenericViewSet, mixins.DestroyModelMixin):
      serilaizer_class = CustomerSerializer

那么你應該在你的 appName 文件夾中為所有對 api 的請求定義路由器,你應該在該文件夾中創建 urls.py 文件,如下所示

您可以在我的項目和 urls.py 中看到客戶應用程序文件夾

在 urls.py 中像這樣定義路由器和 url 模式

app_name 變量定義了 revers 函數使用的 url 的名稱

轉到應用程序文件夾(app/urls.py)中的 urls.py 並定義如下路徑“您應該定義一個路徑來引用 customer/urls.py ..我們在上一步中創建了 customer/urls.py

在 (app/urls.py) 中定義路徑

OK .. 在瀏覽器中運行你的項目並輸入你的本地主機地址 http://(你的本地主機地址)/api/customer/customers/1/ 和 DELETE 請求(不是 POST、GET 或 PATCH 請求)

這是一些關於路由器和視圖集的鏈接

路由器: https : //www.django-rest-framework.org/api-guide/routers/

模型視圖集: https : //www.django-rest-framework.org/api-guide/viewsets/#modelviewset

通用視圖集: https ://www.django-rest-framework.org/api-guide/viewsets/#genericviewset

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM