【发布时间】:2012-11-08 08:12:21
【问题描述】:
如何根据本地时间和时区在 Admin 中格式化 DateTimeField ?
我的设置.py:
TIME_ZONE = 'Europe/Bratislava'
LANGUAGE_CODE = 'en-us'
USE_I18N = True
USE_L10N = True
USE_TZ = True
pytz 包已安装。
型号:
class Material(models.Model):
category = models.ForeignKey(Category, null=True, blank=True)
code = models.CharField(max_length=10)
description = models.CharField(max_length=30, blank=True, null=True)
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
还在设置中尝试了一些日期格式,这些都没有改变日期时间对象在管理列表显示中转换为字符串的方式:
DATETIME_FORMAT = 'd N Y'
DATE_FORMAT = 'd N Y'
在数据库中正确存储日期时间,“2012-11-20 08:57:15.901341+01”。但在管理员中显示时,它始终是 UTC。
我可以在 ModelAdmin 中准备方法来处理格式,但这并不真正 DRY,因为我希望我的管理类看起来像这样:
from django.utils.timezone import localtime
class MaterialAdmin(admin.ModelAdmin):
list_display = ('code', 'modified_local', 'created')
def modified_local(self, row):
return localtime(row.modified)
modified_local.admin_order_field = 'modified'
modified_local.short_description = 'Modified'
【问题讨论】:
-
pyshell 中
from django.utils.formats import localize; localize(localtime(row.modified))的输出是什么? -
>>> row.modified datetime.datetime(2012, 11, 20, 7, 57, 15, 901000, tzinfo=
) >>> localize(localtime(row.modified))十一月2012 年 2 月 20 日上午 8 点 57 分' -
@Edke 定义属性如方法的解决方案很差,是一种糟糕的设计模式。看看我的解决方案/配置。
标签: django django-admin django-timezone