Django - Установка текущей даты в качестве начальной/по умолчанию в форме DateField с помощью SelectDateWidget
У меня есть модель:
class Planning (models.Model):
#other fields#
month = models.DateField(default=date.today)
class Meta:
verbose_name_plural = 'Planning'
И у меня есть эта модель формы:
class PlanningForm(forms.ModelForm):
#other fields#
month = forms.DateField(
label='Mês/Ano',
required=True,
widget=forms.SelectDateWidget(
attrs={'type': 'date',
'value': date.today},}),
error_messages={'required': '', },
)
class Meta:
model = Planning
fields = '__all__'
Я использую SelectDateWidget для отображения только месяца/года (я скрыл селектор дня с помощью CSS), вот так:
Форма работает как задумано, но проблема в том, что я не могу установить поле для отображения текущей даты. Когда форма отображается, она всегда показывает первую дату года.
В приведенном выше коде я попытался показать дату, используя атрибут value из HTML. Это прекрасно работает, когда я использую widget=forms.DateInput
, но я представляю, что виджет полностью изменяет ввод, поэтому он не работает.
Я также попытался добавить начальное значение так же, как я сделал для модели, используя строку initial=date.today
, но для того, что я могу получить, это работает только для несвязанных форм, а поскольку мое представление работает if form.is_valid():
, это не тот случай.
И я действительно пытался установить диапазон для месяцев, в соответствии с этим вопросом, но безуспешно.
Есть ли способ установить текущую дату с помощью этого конкретного виджета?
Вы должны быть в состоянии сделать это, переопределив метод __init__
:
class PlanningForm(forms.ModelForm):
# ...
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['month'].initial = date.today()
# ...
Я думаю, что также есть проблема с отступом и скобками в вашем объявлении поля month