managers.py 838 B

1234567891011121314151617181920212223
  1. from django.db import models
  2. from django.core.exceptions import MultipleObjectsReturned
  3. class OrderManager(models.Manager):
  4. def get_order_by_cart(self, request):
  5. # short circuit if they don't have a session yet.
  6. if not request.session.session_key:
  7. # manually set it as modified so it gets created for us
  8. request.session.modified = True
  9. return None
  10. cart_id = request.session.session_key
  11. lookup_kwargs = {"cart_id": cart_id}
  12. try:
  13. order, new = self.get_or_create(**lookup_kwargs)
  14. # associate the order with the cart.
  15. if new:
  16. order.cart_id = cart_id
  17. order.save()
  18. except MultipleObjectsReturned:
  19. order = self.filter(**lookup_kwargs).order_by("id")[0]
  20. return order