12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- """ 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)
|