dans les Manager/QuerySet customisé renvoit une sous-classe du QuerySet customisé dans la méthode none()

This commit is contained in:
Benjamin Dauvergne 2012-07-18 17:03:13 +02:00
parent 78295726a9
commit 1cd0f37b25
1 changed files with 9 additions and 0 deletions

View File

@ -7,6 +7,7 @@ import time
import django.core.cache
from django.core.urlresolvers import RegexURLPattern, RegexURLResolver
from django.db import models
from django.db.models import query
def get_next_workable_day(today=None, hours=0, days=2, increment_hours=0, increment_days=1):
if today is None:
@ -183,6 +184,10 @@ class QuerySetManager(models.Manager):
def get_query_set(self):
return self.queryset_class(self.model)
def none(self):
klass = type("_InstrumentedEmptyQuerySet_%s" % self.__class__.__name__, (query.EmptyQuerySet, self.__class__), {})
return self._clone(klass=klass)
def __getattr__(self, attr, *args):
try:
return getattr(self.__class__, attr, *args)
@ -194,6 +199,10 @@ class QuerySet(models.query.QuerySet):
"""Base QuerySet class for adding custom methods that are made
available on both the manager and subsequent cloned QuerySets"""
def none(self):
klass = type("_InstrumentedEmptyQuerySet_%s" % self.__class__.__name__, (query.EmptyQuerySet, self.__class__), {})
return self._clone(klass=klass)
@classmethod
def as_manager(cls, ManagerClass=QuerySetManager):
return ManagerClass(cls)