1

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:

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

API にアクセスすると、期待どおりのイベントが発生します。しかし、YearArchiveView は、返されるイベントを指定した年に制限しているように見えます。これも想定内ですが、マネージャーで参照する範囲 (つまり、7 月 1 日から 6 月 30 日) にまたがってほしいと思います。

この動作を変更するにはどうすればよいですか? または、別のビュー (ListView) を試す必要がありますか?

4

1 に答える 1

1

ここでベースとして使用する必要はないと思いますYearArchiveView。その日付のオブジェクトを取得するための組み込みロジックが多すぎます。

代わりに、次のように使用ListViewYearMixinます。

class VisitingScholarsYearView(YearMixin, ListView):
于 2011-11-02T13:52:20.720 に答える