Skip to content

Instantly share code, notes, and snippets.

@rturowicz
Last active December 15, 2015 07:59
Show Gist options
  • Save rturowicz/5227935 to your computer and use it in GitHub Desktop.
Save rturowicz/5227935 to your computer and use it in GitHub Desktop.
django - multiple / custom managers
# managers.py
class ModelClassApprovedOnlyManager(models.Manager):
def get_query_set():
self.get_query_set().filter(is_approved=True)
# models.py
class ModelClass(models.Model):
# ...
all_objects = models.Manager() # first manager used in admin
objects = ModelClassApprovedOnlyManager() # second manager used by "objects"
# ------------------------ #
# querysets.py
class EventQuerySet(models.query.QuerySet):
def published(self):
return self.filter(is_published=True)
def upcoming(self):
return self.filter(start_date__gte=datetime.datetime.now())
# managers.py
class EventManager(models.Manager):
def get_query_set(self):
return EventQuerySet(self.model, using=self._db)
def published(self):
return self.get_query_set().published()
def upcoming(self):
return self.get_query_set().upcoming()
# models.py
class Event(models.Model):
is_published = models.BooleanField(default=False)
start_date = models.DateTimeField()
# ...
objects = EventManager() # override the default manager
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment