2010-04-11 51 views
0

我得到一個模型對象,更改屬性,保存它,它仍然具有舊的屬性:保存模型對象不引發錯誤,但屬性值不改變

>>> g = SiteProfile.objects.get(pk=3) 
>>> g.renew_date 
datetime.date(2010, 4, 11) 
>>> g.renew_date = date.today()+timedelta(days=365) 
>>> g.renew_date 
datetime.date(2011, 4, 11) 
>>> g.save() 
>>> g.renew_date 
datetime.datetime(2010, 4, 11, 16, 57, 4, 192684) 

任何人都知道,如果這是數據庫還是其他問題?

+0

發表您的模型 – 2010-04-12 00:50:06

回答

2

我想通了。

的問題是,該場renew_date有爭論auto_now設置爲True這樣:

renew_date = models.DateField(auto_now=True, editable=False) 

我理解auto_now意味着將當前日期創建對象時,可以使用,但事實證明,這是並非如此:

DateField.auto_now

自動設置 現在每次保存對象 。適用於「最後修改」 時間戳。請注意,總是使用當前日期 ;這不僅是您可以覆蓋的默認值 。

django docs

我需要的是auto_now_add其中:

自動設置領域到現在 首先創建對象時。 用於創建時間戳。 請注意,當前日期始終使用 ;這不僅是您可以覆蓋的默認值 。

所以,改變了我的renew_date後場:

renew_date = models.DateField(auto_now_add=True, editable=False) 

所有的工作,就好:)

>>> g = SelectStatProfile.objects.get(pk=3) 
>>> g.renew_date 
datetime.date(2010, 4, 11) 
>>> from datetime import date, timedelta 
>>> g.renew_date = date.today()+timedelta(days=365) 
>>> g.renew_date 
datetime.date(2011, 4, 11) 
>>> g.save() 
>>> g.renew_date 
datetime.date(2011, 4, 11) 
0

請檢查自動提交的django文檔。我想你必須啓用自動提交才能立即接受更改。

0

也許你已經設置DISABLE_TRANSACTION_MANAGEMENTFalse

正如Django說:

如果你這樣做,Django的將不提供任何自動的事務管理。中間件將不再隱式地提交事務,並且您需要自己進行卷管理。這甚至需要你提交其他地方的中間件所做的更改。

相關問題