繁体   English   中英

如何使用 Javascript 从 DB 和 Django API 视图中删除对象(Django Z50780F47F6839D47D60BC455FZ)

[英]how to delete objects from DB and Django API view with Javascript (Django REST Framework)

我使用 Django 作为后端,使用 PostgresSQL 作为 DB,并使用 HTML、CSS、Z9E13B69D1D2DAACA93771 作为前端。

我正在使用 Django Rest 框架来显示购物车中的所有产品,现在我在删除这些特定产品时遇到了困难。 我正在使用 Javascript 来显示用户选择的产品的所有详细信息。 这是代码:

视图.py

    @api_view(['GET'])
    def showproduct(request):
        if request.method == 'GET':
            result = CartProduct.objects.all()
            serialize = productserializers(result, many = True)
            return Response(serialize.data)

现在是 Javascript 代码,我在其中调用 Django API

索引.html

    <script>
          $(document).ready(function() {
            $.ajax({
              url: 'http://127.0.0.1:8000/index/showdata/',
              dataType: 'JSON',
              success: function(data){
                for (var i = 0; i < data.length; i++)
                {
                  var row = $('<tr><td style="font-style:bold">'+data[i].name+'</td><td style="font-style:bold">'+data[i].price+'</td><td><a href='+data[i].link_href+'><button type="button" class="btn btn-outline-success">Buy</button></a></td><td><a href="" class="btn btn-outline-danger"><i class="fas fa-trash"></i></a></td></tr>');
                  $("#table").append(row);
                }
              }
            });
          });
        </script>

现在index.html中的上述代码,有一个垃圾按钮,我想在其中add code以删除 object 通过 Django ZDB14423871843ADE 中的 object。 怎么做?

已编辑

views.py(添加到购物车功能)

class AddToCartView(TemplateView):
    template_name = "status.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # get product id from requested url
        processor_id = self.kwargs['proc_id']
        # get product
        processor_obj = Processor.objects.get(id=processor_id)

        # check if cart exists
        cart_id = self.request.session.get("cart_id", None)
        if cart_id:
            cart_obj = Cart.objects.get(id=cart_id)
            this_product_in_cart = cart_obj.cartproduct_set.filter(processor=processor_obj)

            # item already exists in cart
            if this_product_in_cart.exists():
                cartproduct = this_product_in_cart.last()
                cartproduct.quantity += 1
                cartproduct.subtotal += processor_obj.price
                cartproduct.save()
                cart_obj.total += processor_obj.price
                cart_obj.save()
            # new item is added in cart
            else:
                cartproduct = CartProduct.objects.create(
                    cart=cart_obj, processor=processor_obj, rate=processor_obj.price, quantity=1, subtotal=processor_obj.price)
                cart_obj.total += processor_obj.price
                cart_obj.save()

        else:
            cart_obj = Cart.objects.create(total=0)
            self.request.session['cart_id'] = cart_obj.id
            cartproduct = CartProduct.objects.create(
                cart=cart_obj, processor=processor_obj, rate=processor_obj.price, quantity=1, subtotal=processor_obj.price)
            cart_obj.total += processor_obj.price
            cart_obj.save()

        return context
@api_view(['DELETE'])
def showproduct(request):
    if request.method == 'DELETE':
        # I assume each cartProduct has an id
        # Aslo when you click the trash button you send a delete request to the API
        # You send the product_id with the request
        try:
            result = CartProduct.objects.get(id=requests.product_id)
        except ObjectDoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)
        result.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

要使一切正常工作,还需要很多其他的东西。 简而言之,您将需要类似以下代码的内容。

您必须为删除请求再次调用 Ajax。 您必须设置删除按钮,以便它可以接受ajax调用。 还需要修正URL

<script>
  $(document).ready(function(){
    $('#delete').submit.function(e){
      e.preventDefault();
      var product_id = {{ cartProduct.id }}
      $.ajax({
        type: 'POST',
        url: 'http://127.0.0.1:8000/index/', + product_id,
        headers: {'X_METHODOVERRIDE': 'DELETE'}
      });
    });
  });
</script>

暂无
暂无

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

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