Django игнорирует настройки локализации при отображении даты и времени в форме

#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 изначально не позволяет изменять часовой пояс для администратора, поскольку данные за все время, используемые администраторами, должны иметь один и тот же ориентир. Похоже, что все администраторы должны использовать одну и ту же единицу измерения.

Однако, как предлагается здесь, вы можете установить часовой пояс для каждого пользователя-администратора, чтобы каждый администратор видел данные временной даты раздела администратора, выраженные в соответствии с его / ее часовым поясом.