如何使Django-admin识别时区?

14

我在数据库中存储了UTC时间信息,现在想在Django管理页面中展示给用户。请问有没有办法将时间信息显示为用户所在的时区?

通常来说,这个逻辑应该在模板或视图层实现,但是 Django-admin 已经帮你隐藏起来了,如果要实现这个功能,看来就需要重写一些隐藏文件(我不太想这样做)。

一个想法是在模型中子类化 DateTimeField 类,并且使其在从数据库获取数据时自动转换为本地时区,但我不确定这是否可行。

请问有什么建议吗?谢谢。


1
我真的很想知道,因为我不得不手动实现它。如果没有人提出任何意见,我将发布我的黑客 - 基本上是一个模板标签。 - jpic
嘿@jpic,我不介意看看你的黑客技巧。如果我找不到一个干净的解决方案,这可能是我必须采取的方法。干杯。 - keyworks
3个回答

7
Django 1.4将引入时区支持,但管理员界面尚未使用。仍然存在一些问题,例如要"批准"哪个时区实现(pytz),在哪里存储每个用户的时区(如果没有内置模式迁移auth.User基本上不能触及),而且还没有时区选择UI界面。
因此,这些部分已经可以使用,但目前仍需要自己动手,很抱歉。
请参见我在django-developers上发布的主题http://groups.google.com/group/django-developers/browse_thread/thread/1386a2bf73babc6a

嗨Danny,django 1.4中的django-admin似乎支持时区。我按照django文档中的迁移指南实施时,没有遇到任何问题。 - keyworks
1
我的回答是针对你的问题“在Django管理界面中有没有一种方法可以将日期时间信息显示为终端用户当前所在的时区?” - 在Django管理界面中,无论用户身处何地,所有用户都将看到相同的日期时间(出于上述原因)。 - Danny W. Adair

3

本地化时区支持将在即将发布的 Django 1.4 中提供。


显然,Django 1.4的时区支持将不支持Django管理界面。请参见下面Danny的帖子。 - keyworks
是的,正如文档和丹尼的邮件中提到的那样,这并不是一件容易完成的事情... 但是,好消息是,至少比以前的版本要简单得多。 ;) - roam
Django 1.4支持django-admin的时区。我遵循了这个迁移指南,它完美地工作了。 - keyworks

0

如果您知道要使用哪个时区,有一些技巧可以使管理界面中的数据输入和显示使用该时区。请参阅博客文章https://www.caktusgroup.com/blog/2014/01/09/managing-events-explicit-time-zones/

在我的情况下,所有管理员用户都处于服务器所在的时区,因此我能够使用这种方法让管理界面使用该时区。请注意,这是基于每个字段进行的,而不是全局性的,但我不知道如何让日期层次结构使用相对于此时区的日期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接