managers.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from django.core.exceptions import ObjectDoesNotExist
  2. from django.db import models
  3. class ItemManager(models.Manager):
  4. def active(self):
  5. return self.filter(is_active=True, deleted=False)
  6. def featured_items(self):
  7. return self.active().filter(featured=True)
  8. class SubscriptionManager(ItemManager):
  9. def __init__(self, *args, **kwargs):
  10. super(SubscriptionManager, self).__init__(*args, **kwargs)
  11. def valid_options(self, shipping_type=None, shipping_method=None):
  12. """
  13. :param type: INSTATE, OUTSTATE, FOREIGN
  14. :returns: Only valid subscriptions related to the specific first class
  15. option
  16. """
  17. q = self.active()
  18. if shipping_type:
  19. q.filter(shipping_type=shipping_type)
  20. if shipping_method:
  21. q = q.filter(shipping_method=shipping_method)
  22. return q.order_by('title', 'duration')
  23. def _valid_value_list(self, value, shipping_type=None,
  24. shipping_method=None):
  25. return self.valid_options(
  26. shipping_type, shipping_method).distinct().values_list(value,
  27. flat=True)
  28. def titles_value_list(self, shipping_type, shipping_method=None):
  29. return self._valid_value_list(
  30. 'title', shipping_type, shipping_method=shipping_method)
  31. def durations_value_list(self, shipping_type, shipping_method=None):
  32. return self._valid_value_list(
  33. 'duration', shipping_type, shipping_method=shipping_method)
  34. def shipping_method_value_list(self, shipping_type):
  35. return self._valid_value_list('shipping_method', shipping_type)
  36. def title_images(self):
  37. return self.active().exclude(image__isnull=True).exclude(
  38. image='').values('title', 'image')
  39. def find_price(self, shipping_type, title, duration, shipping_method):
  40. try:
  41. price = self.get(
  42. shipping_type=shipping_type, title=title, duration=duration,
  43. shipping_method=shipping_method).price
  44. except ObjectDoesNotExist:
  45. price = None
  46. return price
  47. class ZipCodeManager(models.Manager):
  48. def active(self):
  49. return self.filter(is_active=True, deleted=False)
  50. class PersonManager(models.Manager):
  51. def get_queryset(self):
  52. return super(PersonManager, self).get_query_set().active()
  53. def active(self):
  54. return self.filter(is_active=True, deleted=False)