Как изменить формат отображения полей времени на сайте администратора Django? - PullRequest
26 голосов
/ 27 августа 2011

Недавно я добавил новую модель на свой сайт, и я использую файл admin.py, чтобы точно указать, как я хочу, чтобы он отображался на сайте администратора. Это прекрасно работает, но я не могу понять, как заставить одно из моих полей даты включать секунды в свой формат отображения. Я вижу только такие значения, как «27 августа 2011 года, 12:12 вечера» когда я хочу увидеть «27 августа 2011 года, 12: 12 *: 37 * p.m.»

Ответы [ 3 ]

26 голосов
/ 02 сентября 2015

копаясь вокруг, я закончил здесь, но применил другой подход к своему приложению.

Изменение форматов по умолчанию для администратора django может быть сделано путем изменения форматов локали django для каждого типа, который вы хотите.

Поместите следующее в файл admin.py (или settings.py), чтобы изменить формат даты и времени по умолчанию у администратора django.

from django.conf.locale.es import formats as es_formats

es_formats.DATETIME_FORMAT = "d M Y H:i:s"

Это изменит форматы даты и времени ModelAdmin для этого файла (или всего сайта, если в настройках).

Это не нарушает фильтры даты и времени администратора и функции заказа, как @Alan Illing указал в комментариях.

надеюсь, что эта помощь в будущем


Дополнительная информация:

Вы можете изменить его для каждой доступной локали в django, которых много.

Используя этот подход, вы можете изменить следующие форматы

from django.conf.locale.es import formats as es_formats

es_formats.DATETIME_FORMAT
es_formats.NUMBER_GROUPING
es_formats.DATETIME_INPUT_FORMATS  
es_formats.SHORT_DATETIME_FORMAT
es_formats.DATE_FORMAT             
es_formats.SHORT_DATE_FORMAT
es_formats.DATE_INPUT_FORMATS      
es_formats.THOUSAND_SEPARATOR
es_formats.DECIMAL_SEPARATOR       
es_formats.TIME_FORMAT
es_formats.FIRST_DAY_OF_WEEK       
es_formats.YEAR_MONTH_FORMAT
es_formats.MONTH_DAY_FORMAT
23 голосов
/ 27 августа 2011

Попробуйте это в ModelAdmin:

def time_seconds(self, obj):
    return obj.timefield.strftime("%d %b %Y %H:%M:%S")
time_seconds.admin_order_field = 'timefield'
time_seconds.short_description = 'Precise Time'    

list_display = ('id', 'time_seconds', )

Конечно, заменив «временное поле» на соответствующее поле в вашей модели и добавив любые другие необходимые поля в «list_display».

4 голосов
/ 24 января 2018

Если вы попробовали ответ Габриэля, но он не работает, попробуйте установить USE_L10N = False в settings.py, он работает для меня.

Обратите внимание, что если для USE_L10N установлено значение True, то формат, определяемый локалью, имеет более высокий приоритет и будет применяться вместо него

См .: https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-DATETIME_FORMAT

...