Django DATETIME_INPUT_FORMATS не работает после обновления до django 5.0

Я только что обновился до django 5.0, и в файле settings.py перестал работать параметр DATETIME_INPUT_FORMATS. Он не принимает даты DOY (%j), как это было раньше. Я просмотрел похожие вопросы на stackoverflow и увидел, что USE_L10N устарел, а USE_L18N должен быть отключен. Даже с этими обновлениями, кажется, что он игнорирует DATETIME_INPUT_FORMATS.

Идеи?

'''

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

DATETIME_FORMAT = 'Y-z H:i:s'

USE_I18N = False

USE_TZ = False

DATETIME_INPUT_FORMATS = [ '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M', '%Y-%m-%dT%H:%M:%S.%f', '%Y-%m-%dT%H:%M:%S', '%Y-%m-%dT%H:%M', '%Y-%m-%d', '%Y-%j %H:%M:%S.%f', '%Y-%j %H:%M:%S', '%Y-%j %H:%M', '%Y-%jT%H:%M:%S.%f', '%Y-%jT%H:%M:%S', '%Y-%jT%H:%M', ] '''

Настройки форматирования даты изменились в Django5, и вы можете выполнить следующие шаги.

Я не старший разработчик, так что, надеюсь, это будет полезно для вас.

Я думаю, что DATETIME_INPUT_FORMATS должен быть таким:

DATETIME_INPUT_FORMATS = ['%Y-%j %H:%M:%S',]

В файле forms.py:

forms.DateTimeField(input_formats=['%Y-%j %H:%M:%S'])

В вашем шаблоне используйте этот тег шаблона:

|date:"Y-z H:i:s"

Возможно, это то, что предложил Ричи, но вот как я обошел эту проблему. Мне не пришлось делать никаких обновлений в шаблонах. Все еще недоумеваю, почему переменная DATETIME_INPUT_FORMATS в settings.py игнорируется после обновления до django 5? Зачем мне нужен этот обходной путь? Это означает, что мне придется делать обновление в нескольких местах, что очень жаль.

В любом случае... Вот как я решил эту проблему. В новом файле custom_fields.py я создал пользовательское поле datetime, которое наследует DateTimeField, но обновляет input_formats:

class CustomDateTimeField(forms.DateTimeField):
    def __init__(self, *args, **kwargs):
        super(CustomDateTimeField, self).__init__(*args, **kwargs)
        self.input_formats=[
            '%Y-%m-%d %H:%M:%S.%f',
            '%Y-%m-%d %H:%M:%S',
            '%Y-%m-%d %H:%M',
            '%Y-%m-%dT%H:%M:%S.%f',
            '%Y-%m-%dT%H:%M:%S',
            '%Y-%m-%dT%H:%M',
            '%Y-%m-%d',
            '%Y-%j %H:%M:%S.%f', 
            '%Y-%j %H:%M:%S', 
            '%Y-%j %H:%M', 
            '%Y-%jT%H:%M:%S.%f', 
            '%Y-%jT%H:%M:%S', 
            '%Y-%jT%H:%M', 
        ]

, который я затем использую в файле forms.py

class MyForm(forms.Form):
    ...
    start_time = custom_fields.CustomDateTimeField()

Это позволяет мне ввести дату в любом из перечисленных форматов (включая DOY, %j).

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