2017-02-10 26 views
0

我在我的一個django視圖中有一個日曆。我試圖返回一個包含開始日期和結束日期之間的日期列表的字典。返回開始日期和結束日期之間的所有日期的字典

目前,我只能返回開始日期或結束日期列表。我需要這些以及其間的所有日子成爲詞典的一部分。

class HolidayCalendar(HTMLCalendar): 

    def __init__(self, holiday): 
     super(HolidayCalendar, self).__init__() 
     self.holiday = self.holiday_days(holiday) 

     #some formatting 

    def holiday_days(self, holiday): 
     #don't actually know how this works.... 
     field = lambda holiday: holiday.start_date.day 
     # field = lambda holiday: holiday.end_date.day 
     return dict(
     [(day, list(items)) for day, items in groupby(holiday, field)] 
    ) 

說實話,我不完全理解這在所有... 這是調用這個觀點:

def holiday(request): 
    #some code 
    date_today = datetime.now() 
    year = date_today.year 
    month = date_today.month 
    my_holidays = Holiday.objects.order_by('start_date').filter(
     Q(start_date__year=year, start_date__month=month) | Q(end_date__year=year, end_date__month=month) 
    ) 
    cal = HolidayCalendar(my_holidays).formatmonth(year, month) 
    #form stuff 
    context = { 
     "holidayform": holidayform, 
     "calendar": mark_safe(cal), 
    } 
    return render(request, "tande/calendar.html", context) 

謝謝!

回答

1

有開始日期和結束日期,您可以將1天的timedelta添加到前者,直到達到後者。事情是這樣的:

day_delta = timedelta(1,0,0) 
next = start_date 
days = [] 
while (end_date - next) < day_delta: 
    next = next + day 
    days.append(next) 

所以現在days將有start_dateend_date

+0

是的,我可以看到這是如何工作,這是有用的。但是,我並沒有設法將這樣的東西與我的代碼整合在一起。因爲我不能訪問start_date和end_date,因爲它不是一個請求...所以我只是得到'Not in queryset'或'Name not defined'錯誤 –

+0

你有'field = lambda holiday:holiday.start_date.day'所以看起來'holiday.start_date'是一個'datetime'對象,似乎也有一個'holiday.end_date',我認爲它是另一個'datetime'。 – yorodm

+0

他們都是我假期模型中的日期字段。它們用於假日視圖來過濾出現的情況,如果這有意義,我希望假期在日曆上顯示start_date以end_date –

0

之間。這裏的日子,一個列表是我的解決方案,我並不需要一個字典中我只是用一個列表末尾:

class HolidayCalendar(HTMLCalendar): 

    def __init__(self, holiday): 
     super(HolidayCalendar, self).__init__() 
     self.holiday = self.holiday_days(holiday) 


def holiday_days(self, holiday): 
     day_delta = timedelta(1,0,0) 
     holidays = Holiday.objects.all() 
     days = [] 
     for balloon in holidays: 
      next = balloon.start_date 
      end = balloon.end_date 
      while (end - next) > day_delta: 
       next = next + day_delta 
       days.append(next) 
      start_day = balloon.start_date 
      days.append(start_day) 
      days.append(end) 
     holiday = [] 
     for purple in days: 
      pink = purple.day 
      holiday.append(pink)   
     return holiday 
相關問題