Skip to content

Instantly share code, notes, and snippets.

@zacharyvoase
Created January 3, 2012 05:36
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save zacharyvoase/1553675 to your computer and use it in GitHub Desktop.
Save zacharyvoase/1553675 to your computer and use it in GitHub Desktop.
Query methods for the Django ORM
import models
class PersonManager(models.Manager):
@models.querymethod
def male(query):
return query.filter(gender='m')
@models.querymethod
def female(query):
return query.filter(gender='f')
@models.querymethod
def older_than(query, age):
return query.filter(age__gte=age)
@models.querymethod
def younger_than(query, age):
return query.filter(age__lt=age)
class Person(models.Model):
GENDER_CHOICES = (
('m', 'Male'),
('f', 'Female'),
('o', 'Other'),
)
name = models.CharField(max_length=255)
age = models.PositiveSmallIntegerField()
gender = models.CharField(choices=GENDER_CHOICES, max_length=1)
objects = PersonManager()
# Usage:
men = Person.objects.male()
minors = Person.objects.younger_than(18)
adults = Person.objects.older_than(18)
adult_men = men.older_than(18)
import models
class Person(models.Model):
GENDER_CHOICES = (
('m', 'Male'),
('f', 'Female'),
('o', 'Other'),
)
name = models.CharField(max_length=255)
age = models.PositiveSmallIntegerField()
gender = models.CharField(choices=GENDER_CHOICES, max_length=1)
@models.querymethod
def male(query):
return query.filter(gender='m')
@models.querymethod
def female(query):
return query.filter(gender='f')
@models.querymethod
def older_than(query, age):
return query.filter(age__gte=age)
@models.querymethod
def younger_than(query, age):
return query.filter(age__lt=age)
# Usage:
men = Person.objects.male()
minors = Person.objects.younger_than(18)
adults = Person.objects.older_than(18)
adult_men = men.older_than(18)
import models
class PersonQuerySet(models.QuerySet):
def male(self):
return self.filter(gender='m')
def female(self):
return self.filter(gender='f')
def older_than(self, age):
return self.filter(age__gte=age)
def younger_than(self, age):
return self.filter(age__lt=age)
class PersonManager(models.Manager):
def get_query_set(self):
return PersonQuerySet(model=self.model)
def __getattr__(self, attr):
return getattr(self.get_query_set(), attr)
class Person(models.Model):
GENDER_CHOICES = (
('m', 'Male'),
('f', 'Female'),
('o', 'Other'),
)
name = models.CharField(max_length=255)
age = models.PositiveSmallIntegerField()
gender = models.CharField(choices=GENDER_CHOICES, max_length=1)
objects = PersonManager()
# Usage:
men = Person.objects.male()
minors = Person.objects.younger_than(18)
adults = Person.objects.older_than(18)
adult_men = men.older_than(18)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment