1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- """ Cart model managers """
- from django.db import models
- from django.core.exceptions import MultipleObjectsReturned
- from django.contrib.contenttypes.models import ContentType
- class CartManager(models.Manager):
- """ shopping cart manager """
- def for_request(self, request):
- """ get a cart from a request """
- # short circuit if they don't have a session yet.
- if not request.session.session_key:
- # manually set it as modified so it gets created for us
- request.session.modified = True
- return None
- lookup_kwargs = {"cart_id": request.session.session_key}
- try:
- cart, new = self.get_or_create(**lookup_kwargs)
- # associate the logged in user to cart, if they are logged in.
- if new and request.user.is_authenticated():
- cart.owner = request.user
- cart.save()
- except MultipleObjectsReturned:
- cart = self.filter(**lookup_kwargs).order_by("id")[0]
- return cart
- def for_session(self, session_key):
- """ get a cart from a session """
- lookup_kwargs = {
- "cart_id": session_key,
- }
- try:
- cart, new = self.get_or_create(**lookup_kwargs)
- except MultipleObjectsReturned:
- cart = self.filter(**lookup_kwargs).order_by("id")[0]
- return cart
- class CartItemManager(models.Manager):
- """ Cart Item manager"""
- def item_for_request(self, session_key, item_token):
- """ get an item from a request """
- return self.get(cart_token=item_token, cart__session_key=session_key)
- def get(self, *args, **kwargs):
- """ get a cart items """
- if "product" in kwargs:
- kwargs["content_type"] = ContentType.objects.get_for_model(
- type(kwargs["product"])
- )
- kwargs["object_id"] = kwargs["product"].pk
- del kwargs["product"]
- return super(CartItemManager, self).get(*args, **kwargs)
|