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

Tri*_*daz 27 python django date-formatting

我最近增加了一个新的模式,我的网站,我使用的是admin.py文件来指定正是我希望它会显示在管理网站.它工作得很好,但我无法弄清楚如何让我的一个日期字段包含其显示格式的秒数.我只看到"2011年8月27日,下午12点12分"这样的价值,我想看的是"2011年8月27日,12:12*:37*pm"

小智 29

挖掘我在这里结束,但对我的应用程序采用了不同的方法.

更改django管理员默认格式可以为您想要的每种类型更改django语言环境格式.

将以下内容放在admin.py文件(或settings.py)上以更改django admin的日期时间默认格式.

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

es_formats.DATETIME_FORMAT = "d M Y H:i:s"
Run Code Online (Sandbox Code Playgroud)

它将更改该文件上的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
Run Code Online (Sandbox Code Playgroud)

  • 记得改变你实际使用的本地,例如`从django.conf.locale.en导入格式为en_formats`然后`en_formats.DATETIME_FORMAT ="dmY H:i:s"` (3认同)
  • 只是避免使用antkowcz答案:对于英语使用:`来自django.conf.locale.en导入格式为en_formats然后en_formats.DATETIME_FORMAT ="dmY H:i:s"`对于西班牙语使用:`来自django.conf.locale.es导入格式为es_formats es_formats.DATETIME_FORMAT ="d MYH:i:s"`等等...... (2认同)

Gab*_*oss 26

在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', )
Run Code Online (Sandbox Code Playgroud)

当然,用模型中的相应字段替换"timefield",并在"list_display"中添加任何其他所需字段.

  • 使用管理员自动过滤器可以解决这个问题. (11认同)
  • 是的,尝试添加time_seconds.admin_order_field ='timefield'在您设置time_seconds.short_description的地方. (5认同)
  • 我想你的意思是[strftime](http://docs.python.org/3.3/library/time.html#time.strftime) (2认同)

yan*_*ros 7

接受的答案是正确的,但是我发现理解它的工作方式/原因有点令人困惑。下面是一个小例子,我希望它能更清楚地说明如何做到这一点。

Django 提供了几种在管理视图中显示“自定义”字段的方法。我更喜欢实现此行为的方法是在类中定义一个自定义字段ModelAdmin并显示该字段而不是您想要的字段:

from django.contrib import admin
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)
    birthday = models.DateField()

class PersonAdmin(admin.ModelAdmin):
    @admin.display(description='Birthday')
    def admin_birthday(self, obj):
        return obj.birthday.strftime('%Y-%m-%d')

    list_display = ('name', 'admin_birthday')
Run Code Online (Sandbox Code Playgroud)

请注意,我们没有显示模型birthday中的实际字段Person,而是将自定义字段 ( admin_birthday) 定义为 中的方法PersonAdmin,并通过将其添加到list_display属性来显示该方法。此外,admin.display()装饰器还修改 Django 在管理视图中显示此自定义字段的方式。使用这种方法,管理面板将显示“姓名”“生日”字段,但使用您首选的日期格式。

我更喜欢这种方法的原因是您将Model字段定义与管理面板中的显示方式分开。您可以在Django 管理文档中阅读有关替代方法的更多信息。


Orc*_*rca 5

如果你已经尝试了加布里埃尔的答案,但它没有工作,尝试设置USE_L10N = Falsesettings.py,它为我工作。

请注意,如果USE_L10N设置为True,则由区域设置指定的格式具有更高的优先级,并且将被应用

请参阅:https//docs.djangoproject.com/zh-CN/2.0/ref/settings/#stdsetting-DATETIME_FORMAT