日期时间字段以不同的值保存,并以django形式显示不同的值



我有一个模型,里面有一个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保存日期吗?我在希腊,因此datetime对象的减2小时(我想)。假设我的应用程序将在许多不同的国家/地区运行,我可以自动执行吗?比如,当我使用属性在模板上呈现日期时,它将显示实际保存的时间,而不是UTC时间。希望我说得有道理。。。。

在我的设置文件中,我有

TIME_ZONE = 'Europe/Athens'
USE_TZ = True

如果您想要每个用户的时区,您需要将其存储在用户配置文件或类似的文件中。然后使用该信息将用户输入的时间转换为要存储的适当UTC。

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

在模板中你可以做

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

有关详细信息,请参阅django时区。

相关内容

  • 没有找到相关文章

最新更新