Django SelectDateWidget
date_range = 100
this_year = date.today().year
birth_date= forms.DateField(label='What is your birth date?', widget=forms.SelectDateWidget(years=range(this_year - date_range, this_year+1)))
Я хотел бы выбирать только даты через 100 лет после сегодняшнего дня. Но сейчас я могу получить значения типа 31 декабря 2021 года, где иногда месяцы и дни не совпадают с правильными значениями.
Django ожидает список или кортеж для years
параметра в SelectDateWidget.
Попробуйте использовать:
this_year = date.today().year
year_range = [x for x in range(this_year - 100, this_year + 1)]
birth_date = forms.DateField(
label="What is your birth date?",
widget=forms.SelectDateWidget(years=year_range),
)
Добавьте валидатор поля формы, если вы хотите проверить наличие выбранной даты в определенном диапазоне. Вот пример с наивным расчетом на 100 лет назад:
from datetime import datetime, timedelta
class YourForm():
...
def clean_birth_date(self):
birth_date = self.cleaned_data['birth_date']
today = datetime.today()
first_date = today - timedelta(days=100 * 365)
if not (first_date < birth_date < today):
raise ValidationError("Please select a date within the last 100 years")
return data