Очень часто приходится писать менеджеры для моделей, которые осуществляют фильтр query_set'a по одному или нескольким заранее известным полям. Ну например менеджер для активных/не активных статей и т.п.
Код самого менеджера очень прост:
from django.db import models
class GenericManager( models.Manager ):
"""
Filters query set with given selectors
"""
def __init__(self, **kwargs):
super( GenericManager, self ).__init__()
self.selectors = kwargs
def get_query_set(self):
return super( GenericManager, self ).get_query_set().filter( **self.selectors )
Теперь небольшой пример использования:
class Entry( models.Model ):
#...
active = models.BooleanField( default = True )
#managers
objects = models.Manager() # default manager must be always on first place! It's used as default_manager
active_objects = GenericManager( active = True ) # only active entries
inactive_objects = GenericManager( active = False ) # only inactive entries
Сам пользуюсь. Очень удобно.
Комментарии 3
Пытаюсь использовать ваш менеджер, но при попытке вызова
Используется django-trunk svn 6914
PS. Но сама суть работы модели мне очень нравится
Да, прошу прощения, немного наврал с исходником. Уже поправил пост. Пользуйтесь:)
Оставлен 12 Декабрь 2007 в 22:08 ¶Благодарю
Оставьте комментарий