"Я создаю приложение для корзины, когда пользователь регистрируется на веб-сайте и впервые входит в систему на веб-сайте, поэтому корзина создает после этого пользователя, добавляет элементы в корзину и удаляет элемент из корзины, но когда пользователь выходит из веб-сайта и снова входит в системувеб-сайт, поэтому снова создается новая корзина. "
" Я хочу проверить, что у пользователя уже есть корзина, и если у пользователя нет корзины, поэтому новая корзина создается, в противном случае у пользователя уже есть корзина, поэтому не создавайте новую корзину "
Models.py
class CartManager(models.Manager):
def new_or_get(self,request):
cart_id = request.session.get("cart_id",None)
qs = self.get_queryset().filter(id=cart_id)
if qs.count() == 1:
new_obj = False
cart_obj = qs.first()
if request.user.is_authenticated and cart_obj.user is 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
return 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)
class Cart(models.Model):
user = models.ForeignKey(User,null=True , blank=True , on_delete=models.CASCADE)
product = models.ManyToManyField(Product, blank=True)
subtotal = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
total = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
updated = models.DateTimeField(auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True)
objects = CartManager()
def __str__(self):
return str(self.id)
VIEWS.py
def cart_home(request):
cart_obj,new_obj = Cart.objects.new_or_get(request)
return render(request,"cart/cart.html",{"cart":cart_obj})
"Я начинаю, когда пользовательУ меня нет корзины, поэтому они создают новую корзину, если у пользователя уже есть корзина, поэтому они ловят существующую корзину пользователя "