managers.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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, shipping_method=None):
  24. return (
  25. self.valid_options(shipping_type, shipping_method)
  26. .distinct()
  27. .values_list(value, flat=True)
  28. )
  29. def titles_value_list(self, shipping_type, shipping_method=None):
  30. return self._valid_value_list(
  31. "title", shipping_type, shipping_method=shipping_method
  32. )
  33. def durations_value_list(self, shipping_type, shipping_method=None):
  34. return self._valid_value_list(
  35. "duration", shipping_type, shipping_method=shipping_method
  36. )
  37. def shipping_method_value_list(self, shipping_type):
  38. return self._valid_value_list("shipping_method", shipping_type)
  39. def title_images(self):
  40. return (
  41. self.active()
  42. .exclude(image__isnull=True)
  43. .exclude(image="")
  44. .values("title", "image")
  45. )
  46. def find_price(self, shipping_type, title, duration, shipping_method):
  47. try:
  48. price = self.get(
  49. shipping_type=shipping_type,
  50. title=title,
  51. duration=duration,
  52. shipping_method=shipping_method,
  53. ).price
  54. except ObjectDoesNotExist:
  55. price = None
  56. return price
  57. class ZipCodeManager(models.Manager):
  58. def active(self):
  59. return self.filter(is_active=True, deleted=False)
  60. class PersonManager(models.Manager):
  61. def get_queryset(self):
  62. return super(PersonManager, self).get_query_set().active()
  63. def active(self):
  64. return self.filter(is_active=True, deleted=False)