1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from django.db import models
class QuerySetManager(models.Manager):
def get_query_set(self):
return self.model.QuerySet(self.model)
# Using it in a model:
from django.db.models.query import QuerySet
import datetime
class Entry(models.Model):
...
objects = QuerySetManager()
...
class QuerySet(QuerySet):
def on_date(self, date):
next = date + datetime.timedelta(days = 1)
return self.filter(
posted__gt = date,
posted__lt = next
)
# Now you can get entries on a specific day like so:
# Entry.objects.all().on_date(datetime.date.today())
|
More like this
- Pretty print SQL of query sets by peterbe 4 years ago
- Add Extra Headers to Test Client Requests by luftyluft 4 years, 10 months ago
- Fire Eagle example: views.py from wikinear.com by simon 5 years, 2 months ago
- Orderable inlines using drag and drop with jQuery UI by simon 4 years, 8 months ago
- Easier chainability with custom QuerySets by bendavis78 1 year, 2 months ago
Comments
This works for Entry.objects.filter().on_date(date) but not Entry.objects.on_date(date) as some may wish, for this add the following snippet to QuerySetManager.
`
`
#
In response to the above comment, I believe it can simple be written as:
...since the default attribute lookup will check self.class and superclasses.
#
There are some articles that deepens the concepts exposed in this snnipet:
-http://simonwillison.net/2008/May/1/orm/
-http://mcarthurgfx.com/blog/article/extending-django-models-managers-and-querysets
#
Also see: http://djangosnippets.org/snippets/2117/
#
The simple
__getattr__implementation above no longer works in some cases (as of Django 1.2.4). This replacement does, however:See ticket 15062 for the whole discussion.
#
I had to modify my manager to the following so I would not receive Pickle Errors.
#