managers.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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 = self.get_query_set().filter(
  14. zone__slug=ad_zone, enabled=True).filter(
  15. # is expired or no expiration
  16. Q(expires_on__gt=now) | Q(expires_on__isnull=True)
  17. ).order_by('?')[0]
  18. except IndexError:
  19. return None
  20. else:
  21. try:
  22. ad = self.get_query_set().filter(
  23. category__slug=ad_category, zone__slug=ad_zone,
  24. enabled=True).filter(
  25. # is expired or no expiration
  26. Q(expires_on__gt=now) | Q(expires_on__isnull=True)
  27. ).order_by('?')[0]
  28. except IndexError:
  29. return None
  30. return ad
  31. def enabled(self):
  32. return self.get_query_set().filter(enabled=True)