2011-11-02 6 views
1

Django의 일반 연도 아카이브보기를 사용하여 1 년 단위로 이벤트 객체를 표시하고 있습니다. 이것은 장고가 객체리스트를 전달되는 연도로 제한한다는 것을 알았 기 때문에 이것을 수행하는 가장 좋은 방법 일 수도 있고 그렇지 않을 수도 있습니다. 내 기간이 현재 연도에서 다음 연도로 확대됩니다. 여기 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') 

내 모델에 대한 관리자의의 (a하여 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 :

여기

내보기입니다
url(r'^distinguished-visiting-scholars-series/(?P<year>\d{4})/$', VisitingScholarsYearView.as_view()), 

API를 클릭하면 예상되는 이벤트가 발생합니다. 그러나 YearArchiveView는 반환 된 이벤트를 내가 지정한 연도로 제한하는 것으로 보입니다. 이것은 또한 예상되지만 관리자 (즉, 7 월 1 일에서 6 월 30 일까지)에서 언급 한 범위를 확장하고자합니다.

이 동작을 어떻게 변경합니까? 또는 다른보기 (ListView) 시도해야합니까?

답변

1

여기에 기본으로 YearArchiveView을 사용해야한다고 생각하지 않습니다. 해당 날짜에 개체를 가져 오는 데 너무 많은 논리가 내장되어 있습니다.

대신 YearMixinListView를 사용

class VisitingScholarsYearView(YearMixin, ListView): 
+0

YearMixin 말이,하지만 난 BaseDetailView에서 무엇을 무엇입니까? 나는 전화 할 때 슬러그 또는 물건을 가지고 있지 않다. 어떻게 보이나요? –

+0

죄송합니다. ListView가 업데이트되어 있어야합니다. –

+0

네, 방금 알아 냈습니다. 훌륭하게 작동합니다. 감사! –

관련 문제