繁体   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