Невозможно автозаполнить поле даты в шаблоне django с помощью widget_tweaks
Я создаю приложение на django, которое по сути является сервисом для юридических лиц для автоматического создания счетов-фактур. Для необходимой информации о пациентах, которая должна быть напечатана в счете, у меня есть модель Patient:
class Patient(models.Model):
address_as = models.ForeignKey('AddressAs', on_delete=models.PROTECT)
first_name = models.CharField('First Name', max_length=120)
last_name = models.CharField('Last Name', max_length=120)
birthday = models.DateField('Birthday')
guardian = models.ForeignKey('Guardian', on_delete=models.CASCADE)
court = models.ForeignKey(Court, related_name='patients', on_delete=models.PROTECT)
record_number = models.CharField('Record Number', max_length=50)
first_billing_date = models.DateField('Start of Legal Care', null=True, blank=True)
billing_start = models.DateField('Start of Billing', null=True, blank=True)
billing_end = models.DateField('End of Billing', null=True, blank=True)
last_billing = models.DateField('Last Billing Date', null=True, blank=True)
dutyscope_financial = models.BooleanField('Dutyscope Financial Care')
is_wealthy = models.BooleanField('Patient is wealthy', default=False)
taken_from_volunteer = models.BooleanField('Taken from Volunteer', default=False)
given_to_volunteer = models.BooleanField('Given to Volunteer', default=False)
def __str__(self):
return f'{self.last_name}, {self.first_name}, geb. {self.birthday}'
и очень простой класс формы:
class PatientForm(forms.ModelForm):
class Meta:
model = Patient
fields ='__all__'
и, конечно, представление для создания пациентов и шаблон.
Пока все хорошо. Все работает. Но теперь я хочу добавить возможность редактировать данные пациента. Для этого я создал новое представление:
def edit_patient(request, patient_id):
patient = Patient.objects.get(id=patient_id)
if request.method =='POST':
form = PatientForm(request.POST or None, instance=patient)
if form.is_valid():
updated_patient = form.save()
return HttpResponseRedirect(reverse('show-patients'))
form = PatientForm(instance=patient)
return render(request, 'edit-patient.html', {'form': form})
Соответствующий шаблон (с widget_tweaks и bootstrap):
Но когда я вызываю edit_patient, я получаю обратно шаблон без заполненного дня рождения и других дат. Все остальные поля заполняются сохраненной информацией.
Что за проблема с датами?
Я уже задавал вопрос на форуме django и получил подсказку попробовать форму без widget_tweaks. Если я рендерю ее с помощью {{ form.as_p }}, то поля даты заполняются. Итак... Как мне заставить это работать с widget_tweaks?
OK, я понял это после долгих проб и ошибок:
В моем settings.py
у меня было
LANGUAGE_CODE = 'de-de'
При отправке формы она передала данные в формате дд.мм.гггг, в соответствии с установленной локалью. Это переданный источник поля ввода страницы:
<input type="date" name="birthday" value="10.04.2004" class="form-control" required="" id="id_birthday">
Похоже, что django или widget_tweaks не очень хорошо работают с локалями. Согласно W3 Schools, для ввода даты в HTML всегда требуется значение в формате yyyy-mm-dd, и только после этого браузер отображает дату в соответствии со своей локалью.
Я изменил локаль в settings.py
обратно на
LANGUAGE_CODE = 'en-us'
и теперь все работает нормально:
<input type="date" name="birthday" value="2004-04-10" class="form-control" required="" id="id_birthday">
и также форма отображается красиво.