【问题标题】:Django admin: timezone displayDjango 管理员:时区显示
【发布时间】:2016-08-02 20:52:03
【问题描述】:

所以我正在制作一个应用程序,您可以在其中找到发生在某个位置的活动。

在 django-admin 页面上,我希望能够修改活动(有效)。

但是一个活动有一个开始时间 - 我希望这个开始时间与该位置处于同一时区。

所以我希望它在活动管理页面上显示开始时间,与位置所在的时区相同,但保存后应转换为 UTC 时间。

开始时间在一个内联表单集中,因为它可以有多个开始时间。

我找到了一种在保存对象时更改日期时间的方法,但是当它在 inline-thing 中呈现时我找不到修改它的方法。

如何修改管理页面中呈现的数据?

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    所以我希望它在活动管理页面上显示开始时间,与位置所在的时区相同,但是保存后它应该转换为 UTC 时间。

    根据 Django 关于表单中的时区感知输入 (https://docs.djangoproject.com/en/1.10/topics/i18n/timezones/#time-zone-aware-input-in-forms) 的文档:

    启用时区支持时,Django 会解释输入的日期时间 在当前时区的表单中并返回感知的日期时间对象 在cleaned_data中。

    据我了解,这就是您想要的。这将我们引向默认时区和当前时区 (https://docs.djangoproject.com/en/1.10/topics/i18n/timezones/#default-current-time-zone),其中指出:

    当前时区是用于渲染的时区。

    您应该将当前时区设置为最终用户的实际时间 带有 activate() 的区域。否则,使用默认时区。

    所以,使用 activate() (https://docs.djangoproject.com/en/1.10/ref/utils/#django.utils.timezone.activate) 来设置 timezone 参数,一切顺利。

    【讨论】:

    • 我最终在我的 admin.StackedInline 类的 init 中使用了 timezone.activate()。这就像一个怪异的魅力。非常感谢你。从来没有想过做这样的事情!谢谢
    【解决方案2】:

    尝试设置
    USE_L10N = False 在 settings.py 上:

    https://docs.djangoproject.com/en/1.9/ref/settings/#use-l10n

    【讨论】:

    • 并不是我想要的一切——正如我所说的,我的问题是我需要在用户不知道的情况下动态地为每个对象设置一个特定的时区:)
    猜你喜欢
    • 2014-09-08
    • 2010-11-25
    • 2016-06-20
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2016-01-13
    • 2012-05-06
    相关资源
    最近更新 更多