在Django管理网站中,如何更改时间字段的显示格式?

57 投票
4 回答
47968 浏览
提问于 2025-04-17 00:27

我最近在我的网站上添加了一个新模型,并且我使用一个叫 admin.py 的文件来指定它在管理界面上应该怎么显示。这个设置运行得很好,但我就是搞不清楚怎么让我的一个日期字段在显示格式中包含秒。我现在看到的格式是“2011年8月27日,下午12:12”,而我想看到的是“2011年8月27日,下午12:12*:37*”。

4 个回答

12

如果你试过gabriel的回答但没有效果,可以试着在settings.py文件里把USE_L10N = False设置为假,这样对我有效。

注意,如果USE_L10N设置为真,那么系统会优先使用地区设置的格式,而不是你自己设置的格式。

查看详细信息:https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-DATETIME_FORMAT

59

我在网上查找资料时找到了这个,但我对我的应用采取了不同的方法。

要改变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的日期时间格式(如果在settings中修改,则会影响整个网站)。

这不会影响后台的日期时间过滤和排序功能,正如@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
62

在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', )

当然,你需要把“timefield”替换成你模型里合适的字段,并且在“list_display”里添加其他需要显示的字段。

撰写回答