Cart model manager part 2 - lhmisho/django-eCommerce GitHub Wiki
Creating cart on model
carts/models.py
from django.db import models
from django.conf import settings
from products.models import Product
# Create your models here.
User = settings.AUTH_USER_MODEL
class CartManager(models.Manager):
# creating cart object on model so that we can use it where ever we neeed
def new_or_get(self, request):
cart_id = request.session.get("cart_id", None)
qs = self.get_queryset().filter(id=cart_id)
# if the id is exits than go else create one
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:
# if there is some issue than it's might me ( cart_obj = self.new_cart(user=request.user) )
cart_obj = self.new_cart(user=request.user)
new_obj = True
request.session['cart_id'] = cart_obj.id
return cart_id, new_obj
def new_cart(self, user=None):
print(user)
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)
products = models.ManyToManyField(Product, blank=True)
total = models.DecimalField(default=0.0, decimal_places=2, max_digits=100)
updated = models.DateTimeField(auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True)
objects = CartManager()
def __str__(self):
return str(self.id)
playing with views
carts/views.py
from django.shortcuts import render
from .models import Cart
# Create your views here.
# method for create a cart for user.
def crete_cart(user=None):
cart_obj = Cart.objects.create(user=None)
print("New cart created")
return cart_obj
def cart_home(request):
cart_id = Cart.objects.new_or_get(request)
return render(request, 'carts/cart_home.html', {})