2013-03-29 29 views
-2

節省當我輸入shell,我碰到以下問題:我的狀態對象未在Django

from users.models import Status 
from django.utils import timezone 

Status.objects.all() 
>>> [] 
p = Status() 
p.status_time = timezone.datetime.min 
p.status_time 
>>> datetime.datetime(1, 1, 1, 0, 0) 
p.save() 
Status.objects.all() 
>>> [<Status: Status object>] 
print(Status.objects.all()[0].status_time) 
>>> None 

我不明白爲什麼status_time不正確保存。我的狀態模型如下:

​​

有人可以請解釋這種行爲,並可能建議修復?

+0

你使用什麼數據庫?它是否支持過去的日期? –

+0

我正在使用sqlite3,據我所見,很酷與datetime.datetime.min – Abs

+0

帕維爾,我可以證實,我得到同樣的問題,如果我用'timezone.datetime.now'替換'timezone.datetime.min' ()'所以這不是問題。 Vken,我不這麼認爲。我想將'status_time'設置爲'time'。 – Abs

回答

1

我以前告訴過你,你需要閱讀文檔並按照教程。這不是爲模型字段設置默認值的方法。請閱讀https://docs.djangoproject.com/en/1.5/的文檔和教程。如果您在練習期間遇到問題,請回過頭來提問,但如果您錯誤地繼續練習,您只會形成不良習慣。


我意識到原始內容可能看起來很有侵略性,那不是意圖。我只是想阻止你以自己的方式做事,而不是按照他們設計的方式來做事,並浪費大量的時間在這個過程中(我之前做過)。話雖如此,我會試着展示django的設計師如何設計你的模型。

class Status(models.Model): 
    status = models.CharField(max_length=200, null=True, blank=True) 
    time = models.DateTimeField('date published', default=timezone.datetime.min) 

正如你所看到的,沒有創建模型時使用__init__。你只需將它作爲屬性賦予它。每個字段類型有幾個選項來設置之類的默認值,MAX_LENGTH等..

+0

謝謝 - 你是對的。我將其更改爲 'class Status(models.Model): status = models.CharField(max_length = 200,default ='') status_time = models.DateTimeField('date published',default = timezone.datetime.min )' 它工作。 – Abs

+0

@Ngenator:http://bostonpython.com? –

+0

另外,@Abs我更新了答案,因爲當我沒有嘗試成爲時,它似乎有點苛刻。 – Ngenator

0

爲什麼不能簡單地做:

類狀態(models.Model):

status = models.CharField(max_length=200) 
status_time = models.DateTimeField(auto_now_add=True) 

這將增加創建Status實例後自動創建日期時間對象。更多信息here

+0

看起來他想將其設置爲'timezone.datetime.min',它與'auto_now_add'不一樣 – Ngenator