Как добавить или удалить количество корзины django, а также в шаблонах? - PullRequest
0 голосов
/ 07 апреля 2020

Views.py def cart_home (запрос): cart_obj, new_obj = Cart.objects.new_or_get (запрос) обратный рендер (запрос, "тележки / дом. html", {"корзина": cart_obj})

def cart_update (request): product_id = request.POST.get ('product_id'), если product_id не является None: try: product_obj = Product.objects.get (id = product_id), за исключением Product.DoesNotExist: print ("Просрочено" product ") return redirect (" cart: home ") cart_obj, new_obj = Cart.objects.new_or_get (запрос), если product_obj в cart_obj.products.all (): cart_obj.products.remove (product_obj) else: cart_obj.products.add (product_obj) request.session ['cart_items'] = cart_obj.products.count () перенаправление возврата ("cart: home")

класс models.py CartManager (models.Manager): def new_or_get (self, request): cart_id = request.session.get ("cart_id", Нет) qs = self.get_queryset (). filter (id = cart_id) если qs.count () == 1: new_obj = False cart_obj = qs.first ( ) если request.user.is_authenticated () и cart_obj.user равен None: cart_obj.user = request.user cart_obj .save () else: cart_obj = Cart.objects.new (user = request.user) new_obj = True request.session ['cart_id'] = cart_obj.id вернуть cart_obj, new_obj

def new(self, user=None):
    user_obj = None
    if user is not None:
        if user.is_authenticated():
            user_obj = user
    return self.model.objects.create(user=user_obj)

класс Корзина (models.Model): user = models.ForeignKey (пользователь, null = True, пусто = True) enter code here products = models.ManyToManyField (CartItem, blank = True) промежуточный итог = models.DecimalField (по умолчанию = 0,00, max_digits = 65 , decimal_places = 2) итого = models.DecimalField (по умолчанию = 0,00, max_digits = 65, decimal_places = 2) обновлено = models.DateTimeField (auto_now = True) отметка времени = models.DateTimeField (auto_now_add = True)

objects = CartManager()

def __str__(self):
    return str(self.id)

def m2m_changed_cart_receiver (отправитель, экземпляр, action, * args, ** kwargs): если action == 'post_add' или action == 'post_remove' или action == 'post_clear': products = instance.products.all () total = 0 для x в продуктах: total + = x.price, если instance.subtotal! = total: instance.subtotal = всего instance.save ()

m2m_changed.connect (m2m_changed_cart_receiver, sender = Cart.products. через)

def pre_save_cart_re ceiver (отправитель, instance, * args, ** kwargs): if instance.subtotal> 0: instance.total = float (instance.subtotal) * float (1.15) # 8% налог в остальном: instance.total = 0.00

pre_save.connect (pre_save_cart_receiver, sender = Cart)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...