2014-11-03 68 views
3

我有一个带窗体的小Django应用程序,它将一些数据保存到数据库。从窗体到UTC的Django DateTimeField

这里的形式:

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。

+0

看看[这个](http://stackoverflow.com/questions/79797/how-do-i-convert-local-time-to-utc-in-python)。可以帮助你。 – 2014-11-03 20:46:56

+0

在你的'settings.py'中,你有'USE_TZ = True'吗? – 2014-11-03 22:25:19

+0

是的,'USE_TZ'为'True','TIME_ZONE'为'UTC''。 – 2014-11-03 22:27:31

回答

-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小时在服务器时间之前。