Django: Extending Model Queryset / Manager Methods
Django models automatically come with some very useful methods under the objects Manager. Methods like Model.objects.all(), Model.objects.filter() and Model.objects.get() work quite well.
But what if you are constantly using the same QuerySet over and over? You can either keep typing MyModel.objects.filter(way-to-many-kwargs).order_by(something).etc... over and over -or- extend the objects Manager with your own crazy method.
Let’s say you’ve got the following Model:
class MyModel(models.Model):
...
...
...
All you need to do is subclass Manager, add your method and override your model’s old Manager:
class MyModelManager(models.Manager):
def crazy_query(self):
...
# A bunch of queries, joins, logic, etc...
...
class MyModel(models.Model):
...
...
...
objects = MyModelManager()