Django Model Managers
from django.db import models
class SelectRelatedManager(models.Manager):
"""
A manager that automatically selects related on any query.
Example:
class Account(models.Model):
user = models.ForeignKey('auth.User', unique=True)
objects = SelectRelatedManager('user')
account = Account.objects.get(pk=1) # 1 query
account.user.username # 0 queries
"""
def __init__(self, *select_related):
self._select_related = select_related
super(SelectRelatedManager, self).__init__()
def get_query_set(self, *args, **kwargs):
queryset = super(SelectRelatedManager, self).get_query_set(*args, **kwargs)
return queryset.select_related(*self._select_related)
from django.db import models
class ChainableManager(models.Manager):
"""
A manager that allows chaining of all methods defined on it.
Example:
class MyManager(ChainableManager):
def active(self):
return self.filter(active=True)
def premium(self):
return self.filter(premium=True)
class MyModel(models.Model):
active = models.BooleanField()
premium = models.BooleanField()
objects = MyManager()
active_premium = MyModel.objects.active().premium()
"""
def get_query_set(self):
queryset_class = type('ChainedQuerySet', (QuerySet, self.__class__,), {})
return queryset_class(self.model, using=self._db)