Невозможно автозаполнить поле даты в шаблоне 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">

и также форма отображается красиво.

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