我已经阅读了很多关于在datetime对象上更改时区的正确和错误方法的文档和其他SO问题。我知道正确的用法是pytz并使用.localize和/或.astimezone而不是使用.replace。
我试图弄清楚如何允许用户在表单中输入时区。我不想使用本地化的浏览器设置来确定用户的时区;用户应该能够指定在将datetime对象保存到数据库之前应用于哪个时区。我已经在模型上放置了django-timezone-field的TimeZoneField,但我无法弄清楚如何将它正确地应用到datetime对象。
我尝试的所有东西实际上都会转换时间。这是我必须在模板中的javascript中而不是在python中执行的操作吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以按以下方式覆盖模型上的save()方法:
import pytz
from django.db import models
class Event(models.Model):
"""A model with a datetime field whose timezone appears in a separate field."""
starts_at = models.DateTimeField("Start date and time")
timezone = models.CharField("Timezone", max_length=128,
choices=[(tz, tz) for tz in pytz.all_timezones if tz.startswith("US")])
def save(self, *args, **kwargs):
tz = pytz.timezone(self.timezone)
self.starts_at = self.starts_at.replace(tzinfo=None)
self.starts_at = tz.localize(self.starts_at)
super().save(*args, **kwargs)