2017-01-30 15 views
0

Я делаю простой календарь, который будет отслеживать события в течение учебного года (август-май). То, что я хотел бы сделать, - это иметь вид архива, который позволит пользователю выбрать учебный год и увидеть события в школьном году.Django YearArchiveView Год выпуска?

Для этого я думал, что буду использовать класс Django ClassArchiveView. Проблема в том, что я не уверен, как отфильтровать результаты, чтобы вместо получения результата от Jan до Dec до августа до мая.

Вид:

class EventArchiveView(YearArchiveView): 
    template_name = "cal/cal_archive.html" 
    queryset = CalEvent.objects.all() 
    date_field = 'start_date' 
    make_object_list = True 
    allow_future = True 

Модель:

class CalEvent(Audit): 
    CAL_CHOICES = (
     ('HOLIDAY','Holiday'), 
     ('SECONDARY','Secondary'), 
     ('ELEMENTARY','Elementary'), 
     ('TEACHER','Teacher'), 
     ('TERM','Term'), 
     ('TESTING','Testing'), 
     ('GRAD','Graduation'), 
    ) 
    title = models.CharField(max_length=255) 
    category = models.CharField(max_length=20,choices=CAL_CHOICES,default='HOLIDAY') 
    start_date = models.DateField(help_text="Format: M/D/Y") 
    end_date = models.DateField(blank=True,null=True,help_text="Format: M/D/Y. Not Required. Fill if event will spans multiple days.") 
    week = models.IntegerField() 
    active = models.BooleanField(default=False) 

    def __str__(self): 
     return self.title 

    def cat_verbose(self): 
     return dict(CalEvent.CAL_CHOICES)[self.category] 

    class Meta: 
     verbose_name_plural = "Cal Events" 

ответ

0

Вы можете попробовать переопределение даты, используя следующие методы

class EventArchiveView(YearArchiveView): 
    template_name = "cal/cal_archive.html" 
    queryset = CalEvent.objects.all() 
    date_field = "start_date" 
    make_object_list = True 
    allow_future = True 

    def _get_current_year(self, date): 
     return date.replace(month=8, day=1) 

    def _get_next_year(self, date): 
     return date.replace(year=date.year+1, month=5, day=1) 
+0

Это работает. Но как вы относитесь к списку «-date»? –