【问题标题】:delete object through Django REST API通过 Django REST API 删除对象
【发布时间】:2019-01-05 19:10:51
【问题描述】:

我正在尝试使用 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() 方法。

【问题讨论】:

标签: python json django rest django-rest-framework


【解决方案1】:

您可以使用查询集来做到这一点:

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

【讨论】:

    【解决方案2】:

    如果您的视图(集)继承自 DestroyModelMixin,或者继承自它的视图集,例如ModelViewSet, http DELETE 支持开箱即用。你可以用 curl 进行测试,例如curl -X DELETE "http://localhost:8000/your-api/products/<product-id>"

    【讨论】:

      【解决方案3】:

      首先,您应该知道如何使用 django rest_framework 中的 Router 和 ModelViewSet 和 GenericViewSet 类,而不是 Product 应用程序,假设您有 Customer 应用程序。 你应该从viewets.ModelViewSet 或viewets.GenericViewSet 和mixins.DestroyModelMixin 继承你的类viewset 在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 文件,如下所示

      you can see customer app folder in my project and urls.py

      在 urls.py 中定义这样的路由器和 url 模式

      app_name variable define the name of url used by revers function

      转到 app 文件夹 (app/urls.py) 中的 urls.py 并定义如下所示的路径“您应该定义一个引用 customer/urls.py 的路径 .. 我们创建 customer/urls.py在上一步中"

      Define path in (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

      【讨论】:

        猜你喜欢
        • 2016-12-03
        • 2020-02-13
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        相关资源
        最近更新 更多