我正在使用Django的通用年份归档视图来按年显示事件对象。这可能是也可能不是最好的方法,因为我发现Django将对象列表限制为通过的年份;我的日期范围跨越当前年份到下一年。
以下是我的观点:
class VisitingScholarsYearView(YearArchiveView):
allow_empty = True
allow_future = True
date_field = 'event_date'
template_name = "events/dvs_test.html"
context_object_name = 'event_list'
make_object_list = True
def get_queryset(self):
return Event.school_year_events.from_year(self.get_year()).filter(event_type__title='Distinguished Visiting Scholars Series')
这是我的模型上的管理器(一个名为event_date的DateField的Event对象):
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(int(year), 7, 1)
end_date = datetime.date((int(year) + 1), 6, 30)
return self.live_events(start_date, end_date)
最后,我的观点网址:
url(r'^distinguished-visiting-scholars-series/(?P<year>\d{4})/$', VisitingScholarsYearView.as_view()),
当我点击API时,我得到了我期望的事件。但是YearArchiveView似乎将返回的事件限制在我给它的那一年;这也是预料之中的,但我希望它能够超出我在经理中所指的范围(即7月1日至6月30日)。
如何更改此行为?或者我应该尝试不同的视图(ListView)?
答案 0 :(得分:1)
我认为你不应该使用YearArchiveView
作为基础 - 围绕获取该日期的对象有太多的内置逻辑。
相反,请将ListView
与YearMixin
:
class VisitingScholarsYearView(YearMixin, ListView):