Как это могло работать? К какой дате события это может относиться? Когда вы звоните Event.past_school_year_events.all()
, у вас нет экземпляра модели. self.model
, как следует из названия, относится к классу модели. Так как он мог узнать, какую дату вы имеете в виду?
На самом деле я не могу понять, что вы пытаетесь сделать - откуда вы собираетесь получить дату. Вы хотите начать с события, а затем получить все другие события в том же году, что и этот? В этом случае, я подозреваю, вы просто хотите превратить past_school_year_events
в метод модели, а не в менеджера.
Редактировать Если вы хотите начать с определенного года, менеджер, безусловно, подходит, но вам нужно будет указать год в методе менеджера в качестве параметра. Для этого я бы использовал отдельный метод в менеджере, а не переопределял get_query_set
- на самом деле, добавьте еще один метод в SchoolYearManager
:
class SchoolYearManager(models.Manager):
def live_events(self, start_date, end_date):
return self.filter(status=self.model.LIVE).filter(event_date__range=(start_date, end_date))
def this_year(self):
now = datetime.datetime.now()
current_year = now.year
start_date = datetime.date(current_year, 7, 1)
end_date = datetime.date((current_year + 1), 6, 30)
return self.live_events(start_date, end_date)
def from_year(self, year):
start_date = datetime.date(year, 7, 1)
end_date = datetime.date(year+1, 6, 30)
return self.live_events(start_date, end_date)
Теперь у вас есть только один менеджер, который не переопределяет get_query_set
, поэтому вам даже не нужно сохранять по умолчанию - вы можете оставить его как objects
. Так что вы можете сделать:
Event.objects.this_year() # all this year's events
Event.objects.from_year(2010) # all events from 2010