2014-11-03 71 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小時在服務器時間之前。