[英]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.