У меня есть простая модель MyModel с полем даты с именем publication_date. У меня также есть собственный менеджер, который фильтрует мою модель на основе этого поля даты.
Этот пользовательский менеджер доступен через .published, а менеджер по умолчанию — через .objects.
from datetime import date, datetime
from django.db import models
class MyModelManager(models.Manager):
def get_query_set(self):
q = super(MyModelManager, self).get_query_set()
return q.filter(publication_date__lte=datetime.now())
class MyModel(models.Model):
...
publication_date = models.DateField(default=date.today())
objects = models.Manager()
published = MyModelManager()
Таким образом, я получил доступ ко всем объектам в админке, но только к опубликованным в моих представлениях (используя набор запросов MyModel.published.all()).
у меня тоже есть
def get_previous(self):
return self.get_previous_by_publication_date()
def get_next(self):
return self.get_next_by_publication_date()
который я использую в своих шаблонах: при просмотре объекта я могу ссылаться на предыдущий и следующий объект, используя
{{ object.get_previous }}
Проблема в том, что это возвращает предыдущий объект в наборе запросов по умолчанию (objects), а не в моем пользовательском (опубликовано).
Интересно, как я могу сообщить этим базовым функциям модели (get_previous_by_FOO) использовать мой пользовательский менеджер. Или, если это невозможно, как сделать то же самое с другим решением.
Спасибо заранее за любые советы.
Изменить
Представление вызывается таким образом в моем urlconf, используя object_detail из общих представлений.
(r'^(?P<slug>[\w-]+)$', object_detail,
{
'queryset': MyModel.published.all(),
'slug_field': 'slug',
},
'mymodel-detail'
),
Я использую Джанго 1.2.