2014-12-01 52 views
1

我有這樣的型號:上更新的Django DateTimeField字段變化與不正確的值

class Menu(models.Model):  
version = models.BigIntegerField(blank=False, null=False) 
local = models.ForeignKey(Local, db_column='id_local') 
created = models.DateTimeField(auto_now_add=True, blank=True,db_column='created') 
actived = models.DateTimeField(db_column='actived') 
class Meta: 
    managed = False 
    db_table = 'menu' 

當我創建的一個對象;所有的工作都很簡單,但我更新'激活'的問題。我使用如下代碼:

menu = Menu.objects.get(version=ver, local=local) 
menu.actived = datetime.now() 
menu.save() 

激活的值是正確的;當我在db(MySql,utf-8字符集)或模板中看到它時,該值對應。但'menu.created'的值更改爲'menu.created - 1 HOUR'的對應值。

我不知道爲什麼;這就是我修改的所有代碼。

+0

它並不總是一樣的時間-1。每次我嘗試更新激活時間;創建的日期時間發生了變化(減去一個數據庫值並保存爲新值) – DoberDog 2014-12-01 20:06:05

+1

好的,我想我明白你在說什麼了。聽起來好像在數據庫的格式和Python的格式之間轉換有些問題,所以時間不斷被抵消。可能是數據庫或適配器的配置問題。這聽起來像你有'USE_TZ = False'?使用意識到的日期時間可能會使這個問題消失。 – 2014-12-01 20:26:52

回答

0

這可能是你有問題,Timezones.Check this文件

,更好的辦法是做類似:

created = models.DateTimeField(default=datetime.datetime.now) 
+0

爲什麼這樣更好? [documentation](https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.DateField)明確建議'auto_now'和'auto_now_add'。 – 2014-12-01 19:23:42

+0

我試過了:created = models.DateTimeField(auto_now = True,blank = True,db_column ='created')/ created = models.DateTimeField(db_column ='created')/ created = models.DateTimeField(default = datetime.datetime。現在,blank = True,db_column ='created')。同樣的結果;但我認爲我是錯誤的解釋自己。每次您使用該函數減去數據庫中的一小時 – DoberDog 2014-12-01 19:30:59

+0

@try我的方法 – wolendranh 2014-12-01 19:33:11

0

最後,我得到了解決。

首先;謝謝凱文克里斯托弗亨利。

在我的settings.py中我改變了這3個設置,並且一切正常。

# If you set this to False, Django will make some optimizations so as not 
# to load the internationalization machinery. 
USE_I18N = True 

# If you set this to False, Django will not format dates, numbers and 
# calendars according to the current locale. 
USE_L10N = True 

# If you set this to False, Django will not use timezone-aware datetimes. 
USE_TZ = False 
相關問題