2011-11-02 33 views
1

我使用Django的通用年份归档视图按年显示事件对象。这可能是也可能不是这样做的最佳方式,因为我发现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') 

这里是我的模型管理器(用的DateField事件对象调用EVENT_DATE):

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)?

回答

1

我不认为你应该使用YearArchiveView作为这里的基地 - 有太多的内置逻辑,让周围的该日期的对象。

相反,使用ListViewYearMixin

class VisitingScholarsYearView(YearMixin, ListView): 
+0

的YearMixin是有道理的,但我是什么,我从BaseDetailView得到些什么?我没有一个slu or或对象PK来呼叫。这看起来如何? –

+0

对不起,应该是ListView - 更新。 –

+0

是的,我只是想到了这一点。很棒。谢谢! –