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), вот так:

enter image description here

Форма работает как задумано, но проблема в том, что я не могу установить поле для отображения текущей даты. Когда форма отображается, она всегда показывает первую дату года.

В приведенном выше коде я попытался показать дату, используя атрибут 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

Вернуться на верх