Django DateTimeField 从表单到 UTC
Posted
技术标签:
【中文标题】Django DateTimeField 从表单到 UTC【英文标题】:Django DateTimeField from form to UTC 【发布时间】:2014-12-30 13:48:47 【问题描述】:我有一个带有表单的小型 Django 应用程序,它将一些数据保存到数据库中。
这是表格:
class SomeForm(forms.Form):
time = forms.DateTimeField()
...
还有我保存它的视图:
class AccountAddIncome(View):
def save(self, form):
model = Model(
time=form.cleaned_data['time']
)
model.save()
def post(self, request, *args, **kwargs):
form = SomeForm(request.POST)
if form.is_valid():
self.save(form)
return redirect(self.success_url)
else:
...
我的问题是,Django 管理员说:“注意:您比服务器时间早 1 小时。”
我的 Ubuntu(服务器)上的 date
命令与我的计算机上的日期完全相同。
但是,当我将此对象保存在数据库中并进行以下查询时:
Model.objects.filter(time__lt=timezone.now())
django 一个小时没有列出之前保存的模型。如果我去管理员那里,将时间设置回一小时,django 会显示该对象。
那么,我的问题是,在 django 中管理日期时间对象的最佳做法是什么?
我想以 UTC 格式保存所有内容,但我无法将该日期时间从表单转换为 UTC。
【问题讨论】:
看看this。可以帮助你。 在你的settings.py
,你有USE_TZ = True
吗?
是的,USE_TZ
是 True
,TIME_ZONE
设置为 'UTC'
。
为了摆脱警告 You are 1 hour ahead of server time.
我只是在 settings.py 中设置了 TIME_ZONE
var
【参考方案1】:
转到 Django 项目的 settings.py
评论时区设置并使用 TIME_ZONE = timezone.now()
from django.utils import timezone
TIME_ZONE = timezone.now()
# TIME_ZONE = 'UTC'
# USE_I18N = True
# USE_L10N = True
# USE_TZ = True
你永远不会看到这个 - 注意:你比服务器时间早 1 小时。
【讨论】:
以上是关于Django DateTimeField 从表单到 UTC的主要内容,如果未能解决你的问题,请参考以下文章
如何在 DJango 的 DateTimeField 中添加默认时间(但不是日期)?
查询 Django 模型时,如何将 Django 中的 DateTimeField 从 UTC 转换为最终用户的时区(通常是 PST)?