Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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
Django无法创建删除会话/购物车中所有项目的函数_Django_Python 3.x_Session_Django Templates_Cart - Fatal编程技术网

Django无法创建删除会话/购物车中所有项目的函数

Django无法创建删除会话/购物车中所有项目的函数,django,python-3.x,session,django-templates,cart,Django,Python 3.x,Session,Django Templates,Cart,我正在尝试创建一个函数,在会话中清空购物车中的所有项目。我有一个非常好的函数,可以删除单个项目,但不能让它对所有项目都起作用。你能告诉我我做错了什么吗?谢谢我已尝试创建以下函数: def empty(self): for each in self.cart: del each self.save() 购物车 在我的url/视图/模板中调用它,如: url.py views.py 模板 非常感谢您的洞察力!完整购物车.py如下: class Car

我正在尝试创建一个函数,在会话中清空购物车中的所有项目。我有一个非常好的函数,可以删除单个项目,但不能让它对所有项目都起作用。你能告诉我我做错了什么吗?谢谢我已尝试创建以下函数:

    def empty(self):
    for each in self.cart:
        del each
    self.save()
购物车

在我的url/视图/模板中调用它,如:

url.py

views.py

模板

非常感谢您的洞察力!完整购物车.py如下:

    class Cart(object):


    def __init__(self, request):
        self.session = request.session


        if not hasattr(settings, 'CART_SESSION_KEY'):
            raise KeyNotSet('Session key identifier is missing in settings')

        if not hasattr(settings, 'PRODUCT_MODEL'):
            raise KeyNotSet('Product model is missing in settings')

        cart = self.session.get(settings.CART_SESSION_KEY)

        if not cart:
            is_model_set = hasattr(settings, 'USE_CART_MODELS')
            if is_model_set and settings.USE_CART_MODELS:
                # cart =
                pass
            else:
                cart = self.session[settings.CART_SESSION_KEY] = {}

        self.cart = cart

    def add(self, product, price, quantity=1,):
        product_id = str(product.id)
        if product_id not in self.cart:
            self.cart[product_id] = {'price': str(price), 'quantity': 0}

        self.cart[product_id]['quantity'] = int(quantity)
        self.save()



        self.cart[product_id]['quantity'] = int(quantity)
        self.save()


    def save(self):
        self.session[settings.CART_SESSION_KEY] = self.cart
        self.session.modified = True

    def remove(self, product):
        product_id = str(product.id)
        if product_id in self.cart:
            del self.cart[product_id]
            self.save()

    def empty(self):
        for each in self.cart:
            del each
        self.save()



    def __iter__(self):
        product_ids = self.cart.keys()

        splitted = settings.PRODUCT_MODEL.split('.')
        app_label = splitted[0]
        model_name = splitted[1]

        try:
            model = apps.get_model(app_label, model_name)
        except LookupError:
            message = 'Model {} not found in app  {}'
            raise ModelDoesNotExist(message.format(model_name, app_label))

        products = model.objects.filter(id__in=product_ids)
        for product in products:
            self.cart[str(product.id)]['product'] = product

        for item in self.cart.values():
            item['price'] = Decimal(item['price'])
            item['total_price'] = item['price'] * item['quantity']
            yield item

    def __len__(self):
        return sum(item['quantity'] for item in self.cart.values())


    @property
    def total_price(self):
        return sum(Decimal(item['price']) * item['quantity'] for item in self.cart.values())

    @property
    def cart_length(self):
        return sum(item['quantity'] for item in self.cart.values())


    def clear(self):
        self.session.cart[settings.CART_SESSION_KEY] = {}
        self.session.modified = True

问题在于,创建购物车时,会创建一个空字典,并将其分配给self.cart和会话:

cart = self.session[settings.CART_SESSION_KEY] = {}
self.cart = cart
但是,当您清除购物车时,您将创建一个空字典,并将其仅分配给会话,而self.cart将指向原始的-仍然填充的-字典:

self.session.cart[settings.CART_SESSION_KEY] = {}  # self.cart still populated
def clear(self):
    self.cart.clear()  # Affects both self.cart and session
    self.session.modified = True
您可以只清除原始词典,而不是在clear中指定新词典:

self.session.cart[settings.CART_SESSION_KEY] = {}  # self.cart still populated
def clear(self):
    self.cart.clear()  # Affects both self.cart and session
    self.session.modified = True

你能放置完整的购物车对象吗?@Walucas更新了显示购物车对象的代码好的,我有一些评论,但之前,你能告诉我在clear方法后你如何知道购物车不是空的吗?我只是刷新了本地服务器上的页面,只是为了看看购物车中是否还有物品。当我使用remove方法时,它会自动执行。我在寻找同样的结果,这正是问题所在!非常感谢你。
self.session.cart[settings.CART_SESSION_KEY] = {}  # self.cart still populated
def clear(self):
    self.cart.clear()  # Affects both self.cart and session
    self.session.modified = True