【问题标题】:How to extend Django generic year archive view?如何扩展 Django 通用年份存档视图?
【发布时间】:2011-12-20 08:21:18
【问题描述】:

我正在使用 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)?

【问题讨论】:

    标签: django datetime view django-generic-views


    【解决方案1】:

    我认为您不应该在这里使用 YearArchiveView 作为基础 - 获取该日期的对象有太多内置逻辑。

    改为使用ListViewYearMixin

    class VisitingScholarsYearView(YearMixin, ListView):
    

    【讨论】:

    • YearMixin 是有道理的,但我从 BaseDetailView 得到了什么?我没有要调用的 slug 或对象 pk。这看起来如何?
    • 是的,我也想通了。效果很好。谢谢!
    猜你喜欢
    • 2011-11-01
    • 1970-01-01
    • 2011-12-12
    • 2013-04-09
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    相关资源
    最近更新 更多