#python #django
#python #django
Вопрос:
У меня есть настройки Django в «settings.py «:
LANGUAGE_CODE = 'en-gb'
TIME_ZONE = 'Europe/London'
USE_I18N = True
USE_L10N = True
USE_TZ = True
С моделью в «models.py «:
class Foo(models.Model):
date_time = models.DateTimeField(null=True, blank=True)
И форма в «forms.py «:
class FooForm(forms.ModelForm):
class Meta:
model = Foo
fields = ['date_time']
И в шаблоне:
<form method="post">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<button type="submit">Submit</button>
<button type="button" onclick="javascript:window.location='/dashboard';">Cancel
</button>
</form>
Но дата отображается на экране в форме, например, как «2020-12-20 10:11:12». Почему Django не использует мои настройки локализации и не отображает дату как «день, месяц, год»?
Я попытался добавить в форму:
date_time = forms.DateTimeField(input_formats=['%d/%m/%Y %H:%M'])
…но это не имело никакого эффекта.
Цитируя руководство по DATETIME_FORMAT: «Форматирование по умолчанию, используемое для отображения полей даты и времени в любой части системы. Обратите внимание, что если для USE_L10N установлено значение True, то формат, определяемый локализацией, имеет более высокий приоритет и будет применен вместо него «.
Комментарии:
1. Это формат ввода .
Ответ №1:
Это input_formats
параметр, поэтому список форматов, который принимается для анализа входных данных, а не для их отображения. Вы можете указать способ форматирования данных с помощью format=…
параметра [Django-doc] виджета:
date_time = forms.DateTimeField(
input_formats=['%d/%m/%Y %H:%M']
widget=forms.DateTimeInput(format='%d/%m/%Y %H:%M')
)
Ответ №2:
например, дата отображается на экране в форме как «2020-12-20 10:11:12».
Вы говорите о дате и времени, отображаемых в разделе администратора Django?
Если это так, это происходит потому TIME_ZONE
USE_TZ
, что настройки и в не применяются к данным, отображаемым в разделе django-admin, а только к данным, отображаемым в шаблонах.
Насколько я знаю, Django изначально не позволяет изменять часовой пояс для администратора, поскольку данные за все время, используемые администраторами, должны иметь один и тот же ориентир. Похоже, что все администраторы должны использовать одну и ту же единицу измерения.
Однако, как предлагается здесь, вы можете установить часовой пояс для каждого пользователя-администратора, чтобы каждый администратор видел данные временной даты раздела администратора, выраженные в соответствии с его / ее часовым поясом.