对于我的大多数应用程序来说,用时区保存日期时间和使用时区设置都可以。我的问题是,如何保存一个日期时间为UTC格式的模型,但日期时间已设置好,以便转换回用户输入的时区是正确的?模型、视图、表单和html如下所示。如果在设置.py文件,但我想保留项目中其他所有内容的时区。在
型号:
class TZTestModel(models.Model):
timezone = TimeZoneField()
dt = models.DateTimeField()
视图:
^{pr2}$形式:
class TZTestForm(forms.ModelForm):
class Meta:
model = TZTestModel
def clean(self):
timezone = self.cleaned_data['timezone']
dt = self.cleaned_data['dt']
dt = timezone.localize(dt)
self.cleaned_data['dt'] = pytz.UTC.normalize(dt.astimezone(pytz.UTC))
return self.cleaned_data
模板:
<html>
<body>
<form method="post">
{% csrf_token %}
{{ form }}
<input type="submit">
</form>
</body>
</html>
示例:
我希望能够在13:00输入“US/Alaska”时区和datetime,将其保存为UTC值,然后能够转换回“US/Alaska”并获得正确的值。在
实际上,我试图将一个模型的datetime保存在与我的应用程序不同的时区中,其中时区由用户以指定日期时间的相同形式指定。在
编辑:表单域的粘贴源:http://pastebin.com/j4TnnHTS 进一步讨论:https://code.djangoproject.com/ticket/21300
这样做的方法似乎是创建一个返回原始日期时间的自定义表单字段,然后将其转换为用户指定的时区,然后将其转换为UTC。在
自定义字段:
^{1}$形式:
^{pr2}$我对对象级时区也有同样的问题。在
我找到了this blog entry。它并不完美,但它有效!并且不太复杂。加上处理管理员处理。在
将片段粘贴到此处:
确保表单在所需时区内处理:
^{1}$在管理列表视图中正确显示
^{pr2}$正确解释管理添加视图中的日期
在管理编辑视图中正确处理时区
相关问题 更多 >
编程相关推荐