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).