123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import datetime
- from django.forms.widgets import Widget
- class DatePickerWidget(Widget):
- template_name = 'widgets/date-picker.html'
- n_weeks = 5
- def get_context(self, name, value, attrs):
- context = super().get_context(name, value, attrs)
- # get first day of the week
- today = datetime.date.today()
- context['widget']['today'] = today
- first_day_of_week = today - datetime.timedelta(days=today.weekday())
-
- # get the weekdays
- weekdays = []
- for i in range(7):
- weekdays.append((first_day_of_week + datetime.timedelta(days=i)).strftime('%A')[0])
- context['widget']['weekdays'] = weekdays
- # for the next weeks
- weeks = []
- for i in range(self.n_weeks):
- date = first_day_of_week + datetime.timedelta(days=i*7)
- week = {
- 'days': [],
- 'month': date.strftime('%b'),
- 'year': date.strftime('%Y'),
- }
- for j in range(7):
- day = {
- 'date': date + datetime.timedelta(days=j),
- 'day': (date + datetime.timedelta(days=j)).strftime('%d'),
- }
- week['days'].append(day)
- weeks.append(week)
- context['widget']['weeks'] = weeks
- return context
-
- def value_from_datadict(self, data, files, name):
- dates = []
- for day in self.GetValidDates():
- if data.get(f"date_{day.strftime('%Y-%m-%d')}") == "on":
- dates.append(day)
- return dates
- def value_omitted_from_data(self, data, files, name):
- return not any(
- (data.get(f"date_{day.strftime('%Y-%m-%d')}") == "on")
- for day in self.GetValidDates()
- )
- def GetValidDates(self):
- today = datetime.date.today()
- return [
- (today + datetime.timedelta(days=i))
- for i in range(7*self.n_weeks)
- ]
|