Django forms.DateInput не реагирует на формат dd/mm/yyyy

в настоящее время у меня проблемы с тем, чтобы валидация ввода работала как ожидалось в Django DateInput

Насколько я понимаю, формат по умолчанию для DateInput будет "%Y-%m-%d", если его не трогать, однако явное задание формата "%d/%m/%Y" по-прежнему вызывает ошибки валидации.

Вот некоторые примеры

Input: 25/03/1981
Ожидается: Действительная дата (Мы ожидаем, что это значение не вызовет ошибку валидации)
. Факт: Введите действительную дату.

Ввод: 1/07/1981
Ожидается: Дата разобрана как 1 июля
. Фактическая: Дата разобрана как 7 января (т.е. дата и месяц разбираются вместо друг друга)

forms.py

class PatientForm(ModelForm):
    class Meta:
        # Make form look nice from here
        model = Patient
        fields = ('PAS_number', 'first_name', 'middle_name',
                  'surname', 'DOB', 'priority_code',
                  'patient_information', 'patient_status')

        widgets = {
            'PAS_number': forms.NumberInput(
                attrs={'class': 'form-control'}),
            'first_name': forms.TextInput(
                attrs={'class': 'form-control'}),
            'middle_name': forms.TextInput(
                attrs={'class': 'form-control'}),
            'surname': forms.TextInput(
                attrs={'class': 'form-control'}),
            'DOB': forms.DateInput(
                format=('%d/%m/%Y'), attrs={'class': 'form-control'}),
            'priority_code': forms.Select(
                attrs={'class': 'form-control'}),
            'patient_information': forms.Textarea(
                attrs={'class': 'form-control'}),
            'patient_status': forms.Select(
                attrs={'class': 'form-control'}),

        }

Кварг format на DateInput просто управляет отображением начального значения - он не управляет тем, как обрабатываются представленные данные. Из документации:

формат: Формат, в котором будет отображаться начальное значение этого поля.

У вас есть два варианта:

  1. Измените настройку DATE_INPUT_FORMATS, чтобы указать форматы, которые вы хотите принимать для ввода - это повлияет на все вводимые даты.

  2. Укажите input_formats на поле формы (не на ее виджете). Для ModelForm это означает переопределение поля по умолчанию.

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