Skip to content

Instantly share code, notes, and snippets.

@pkqk
Created May 24, 2012 22:16
Show Gist options
  • Save pkqk/2784522 to your computer and use it in GitHub Desktop.
Save pkqk/2784522 to your computer and use it in GitHub Desktop.
chained model filters example
# an attempt to make filter, exclude, chainable
# based on: http://zmsmith.com/2010/04/using-custom-django-querysets/
# https://code.djangoproject.com/ticket/16748
# http://djangosnippets.org/snippets/734/
from django.db import models
from django.db.models.query import QuerySet
from datetime import date, timedelta
def manager(query_set_type):
class QueryManager(models.Manager):
def get_query_set(self):
return query_set_type(self.model)
def __getattr__(self, attr):
if attr.startswith('_'):
raise AttributeError(attr)
return getattr(self.get_query_set(), attr)
return QueryManager()
class ThoughtQuerySet(QuerySet):
def useful(self):
return self.filter(useful=True)
def useless(self):
return self.filter(useful=False)
def new(self):
return self.filter(created_on__gte=date.today())
def recent(self):
return self.filter(updated_on__gte=date.today() - timedelta(days=3))
class Thought(models.Model):
subject = models.CharField(max_length=255)
useful = models.BooleanField()
created_on = models.DateField(auto_now_add=True)
updated_on = models.DateField(auto_now=True)
objects = manager(ThoughtQuerySet)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment