datetime字段以不同的值保存,并在表单django中显示不同的值

时间:2013-11-22 11:01:47

标签: python django datetime timezone django-timezone

我有一个包含DateTimeField的模型。

class Event(models.Model):
    .....
    date = models.DateTimeField()

以及此活动的模型表格

class EventForm(ModelForm):

    class Meta:
        model= Event

当我从管理员创建一个事件时,我将时间设置为我希望事件发生的时间,比方说19:30。但是,如果我调用events.date属性,我会得到

event.date
datetime.datetime(2013, 11, 20, 17, 30, tzinfo=<UTC>)

如果我在

这样的模板中使用它
{{event.date.hour}}:{{event.date.minute}}

它显示17:30。

但是当我在模板表格中将其加载到模板上时

event_form = EventForm(instance=event)

并在模板中

{{event_form.as_p}}

然后日期呈现与我在管理页面中添加的日期相同,即19:30

如何更改此行为。 django总是在UTC中保存日期吗?我在希腊,因此在日期时间对象的负2小时(我认为)。假设我的应用程序将在许多不同的国家运行,我可以自动执行此操作,例如当我使用属性在模板上呈现日期时,它将显示实际保存的时间而不是UTC中的时间。希望我有意义......

在我的设置文件中,我有

TIME_ZONE = 'Europe/Athens'
USE_TZ = True

1 个答案:

答案 0 :(得分:2)

如果您需要每个用户的时区,则需要将其存储在用户个人资料中或类似的内容中。然后使用该信息将用户输入的时间转换为适当的UTC进行存储。

如果没有它,您将按照服务器上设置的时区存储时间。因此,如果GMT中的某个用户选择时间为0800,则实际上雅典中的0800不是GMT。

在模板中,您可以

{% load tz %}

{% timezone get_current_users_timezone %}
    {{ event.date }}
{% endtimezone %}

有关详细信息,请参阅django timezones