Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用django视图和模型删除用户订单项目_Python 3.x_Django Models_Django Views - Fatal编程技术网

Python 3.x 如何使用django视图和模型删除用户订单项目

Python 3.x 如何使用django视图和模型删除用户订单项目,python-3.x,django-models,django-views,Python 3.x,Django Models,Django Views,我正在关注Django的电子商务教程,该教程在安装的应用程序中使用allauth和allauth.account。我有以下模型:Item、OrderItem和Order。项目型号代码如下所示: class Item(models.Model): title = models.CharField(max_length=20) price = models.FloatField() discount_price = models.FloatField(null=True, blank=True) c

我正在关注Django的电子商务教程,该教程在安装的应用程序中使用allauth和allauth.account。我有以下模型:Item、OrderItem和Order。项目型号代码如下所示:

class Item(models.Model):
title = models.CharField(max_length=20)
price = models.FloatField()
discount_price = models.FloatField(null=True, blank=True)
category = models.CharField(
    choices=CATEGORY_CHOICES, max_length=2, default="S")
label = models.CharField(choices=LABEL_CHOICES, max_length=1, default="P")
slug = models.SlugField()
description = models.TextField()

def __str__(self):
    return self.title
使用url按id从购物车中删除特定产品 OrderItem的模型:

class OrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         on_delete=models.CASCADE)

ordered = models.BooleanField(default=False)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)

def __str__(self):
    return f"{self.user.username} has {self.quantity} of {self.item.title}"
订单模型

class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         on_delete=models.CASCADE)
items = models.ManyToManyField(OrderItem)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
ordered = models.BooleanField(default=False)

def __str__(self):
    return self.user.username
在my views.py中,以下是我从购物车中删除项目的方法:

def remove_from_cart(request, slug):
# Getting the Item
item = get_object_or_404(Item, slug=slug)
# Check if the user has an order
order_qs = Order.objects.filter(
    user=request.user,
    ordered=False)
# if the user have an order
if order_qs.exists():
    # Then grap it (the order)
    order = order_qs[0]
    # check if the ordered item is in the order by filtering
    if order.items.filter(item__slug=item.slug).exists():
        order_item = OrderItem.objects.filter(
            item=item,
            user=request.user,
            ordered=False
        )[0]
        # Then Remove it

        order.items.remove(order_item)
        messages.info(request, 'This Item was Removed your Cart.')
    else:
        messages.info(request, 'This Item was NOT in your Cart.')
        # Add a message saying the order does not contain the item
        return redirect("core:product", slug=slug)
else:
    messages.info(request, 'The User Does No have an Order.')
    # Add a message saying the user does not exist
    return redirect("core:product", slug=slug)
return redirect("core:product", slug=slug)

这里的问题是,每当从购物车中删除项目时,我也会收到一条消息,说明此项目已从您的购物车中删除,但它不会反映在数据库中。感谢您的帮助

我发现我不知道django admin如何从我的订单表中删除项目。在学习本教程的过程中,我了解到,当项目高亮显示时,即项目仍在订单表中,但当项目未高亮显示时,即项目被删除,尽管您可能会在那里看到它。 以下是商品在购物车中时的屏幕截图(订单型号):

当我单击“从购物车url中删除项目”时,数据库显示:

如果我的回答不对,应该有人纠正我

def remove_from_cart(request, slug):
# Getting the Item
item = get_object_or_404(Item, slug=slug)
# Check if the user has an order
order_qs = Order.objects.filter(
    user=request.user,
    ordered=False)
# if the user have an order
if order_qs.exists():
    # Then grap it (the order)
    order = order_qs[0]
    # check if the ordered item is in the order by filtering
    if order.items.filter(item__slug=item.slug).exists():
        order_item = OrderItem.objects.filter(
            item=item,
            user=request.user,
            ordered=False
        )[0]
        # Then Remove it

        order.items.remove(order_item)
        messages.info(request, 'This Item was Removed your Cart.')
    else:
        messages.info(request, 'This Item was NOT in your Cart.')
        # Add a message saying the order does not contain the item
        return redirect("core:product", slug=slug)
else:
    messages.info(request, 'The User Does No have an Order.')
    # Add a message saying the user does not exist
    return redirect("core:product", slug=slug)
return redirect("core:product", slug=slug)