Files
shopback/cart/signals.py
Beyhan Oğur d9f1ea341e first commit
2026-04-26 22:27:56 +03:00

40 lines
1.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from django.contrib.auth.signals import user_logged_in
from django.dispatch import receiver
from django.conf import settings
from .models import Cart, CartItem
from product.models import Product
@receiver(user_logged_in)
def merge_cart_on_login(sender, user, request, **kwargs):
"""
Kullanıcı giriş yaptığında session sepetini veritabanı sepetiyle birleştirir.
"""
session_cart = request.session.get(settings.CART_SESSION_ID)
if session_cart:
# Kullanıcının DB sepetini al veya oluştur
db_cart, created = Cart.objects.get_or_create(user=user)
for product_id, item_data in session_cart.items():
quantity = item_data['quantity']
product = Product.objects.get(id=product_id)
# Ürün zaten DB sepetinde var mı?
cart_item, item_created = CartItem.objects.get_or_create(cart=db_cart, product=product)
if not item_created:
# Varsa miktarı artır
cart_item.quantity += quantity
else:
# Yoksa miktarı ayarla (default 1 olduğu için üzerine eklemiyoruz, direkt atıyoruz ama get_or_create default ile oluşturduysa quantity 1 olabilir, o yüzden dikkat)
# get_or_create default=1 ile oluşturur. Biz session'dan geleni kullanmalıyız.
# Ancak item_created True ise yeni oluştu demektir ve default değeri almıştır.
# Bizim session'daki quantity'yi atamamız lazım.
cart_item.quantity = quantity
cart_item.save()
# Session sepetini temizle
del request.session[settings.CART_SESSION_ID]
request.session.modified = True