managers.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import datetime
  2. from django.db import models
  3. from django.db.models import Q
  4. class AdManager(models.Manager):
  5. """ A Custom Manager for ads """
  6. def get_random_ad(self, ad_category, ad_zone):
  7. """
  8. Returns a random advert that belongs to the specified category and zone
  9. """
  10. now = datetime.datetime.now()
  11. if ad_category == "":
  12. try:
  13. ad = (
  14. self.get_query_set()
  15. .filter(zone__slug=ad_zone, enabled=True)
  16. .filter(
  17. # is expired or no expiration
  18. Q(expires_on__gt=now)
  19. | Q(expires_on__isnull=True)
  20. )
  21. .order_by("?")[0]
  22. )
  23. except IndexError:
  24. return None
  25. else:
  26. try:
  27. ad = (
  28. self.get_query_set()
  29. .filter(
  30. category__slug=ad_category, zone__slug=ad_zone, enabled=True
  31. )
  32. .filter(
  33. # is expired or no expiration
  34. Q(expires_on__gt=now)
  35. | Q(expires_on__isnull=True)
  36. )
  37. .order_by("?")[0]
  38. )
  39. except IndexError:
  40. return None
  41. return ad
  42. def enabled(self):
  43. return self.get_query_set().filter(enabled=True)