Мне нужно поле DateInput в ModelForm с датчиком по умолчанию HTML (я не использую сторонние библиотеки).
Так как DateInput по умолчанию отображается с <input type = "text">
, DatePicker отсутствует (он поставляется бесплатно с <input type = "date">
)
Я нашел несколько примеров, объясняющих, как изменить ввод введите, обработав widget
параметры (ниже кода, который я сделал до сих пор)
Проблема
У меня работает корректно средство выбора даты, но в "режиме обновления" при передаче начального значения даты в форма (см. часть просмотра), дата остается пустой в HTML.
Я пытался найти причину, и кажется, что часть 'type': 'date'
в настройке виджета очищает исходное значение некоторым образом; на самом деле, удаляя его, дата начального значения снова отображается, но я теряю указатель даты, конечно.
В представлении дата передается с допустимым значением
Я также нашел другое подобное без ответа вопрос , где поле было объявлено как
class DateInput(forms.DateInput):
input_type = 'date'
date_effet = forms.DateField(widget=forms.DateInput(format='%d-%m-%Y'), label='Date effet')
проблема все еще остается
Мой код
model.py
class TimesheetItem(models.Model):
date = models.DateField()
description = models.CharField(max_length=100)
# many other fields here
form.py
class TimesheetItemForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# init is used for other fields initialization and crispy forms
class Meta:
model = TimesheetItem
fields = ['date', 'description']
widgets = {
'date': forms.DateInput(
format=('%d/%m/%Y'),
attrs={'class': 'form-control',
'placeholder': 'Select a date',
'type': 'date' # <--- IF I REMOVE THIS LINE, THE INITIAL VALUE IS DISPLAYED
}),
}
view.py
def edit(request, uuid):
try:
timesheet_entry_item = TimesheetItem.objects.get(uuid=uuid)
if request.method == 'POST':
form = TimesheetItemForm(
data=request.POST,
instance=timesheet_entry_item
)
if form.is_valid():
pass # save the form
else:
form = TimesheetItemForm(initial={
'date': timesheet_entry_item.date, # <--- the date here has a valid value
'description': timesheet_entry_item.description
})
return render(request, 'template.html', {'form': form})
except ObjectDoesNotExist:
raise Http404("error")
Спасибо за любую помощь
M.