【问题标题】:Django DateTimeField from form to UTCDjango DateTimeField 从表单到 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_TZTrueTIME_ZONE 设置为 'UTC'
  • 为了摆脱警告 You are 1 hour ahead of server time. 我只是在 settings.py 中设置了 TIME_ZONE var

标签: python django datetime utc


【解决方案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 小时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多