2014-09-26 54 views
3

Django新手在這裏。我正在爲具有字符串時間戳的SQLite數據庫構建一個Django模型,例如2014-09-23T18:43:26.692Z。因爲我想最終使用Django的查詢過濾引擎(而不是使用strftime),我希望我的模型從ISO字符串生成DateTimeField對象。如果我嘗試申報DateTimeField字段對原始數據庫字段這樣來自ISO8601時間戳字符串的Django模型DateTimeField

startTime = models.DateTimeField(db_column='startTime') 

我得到一個錯誤:「的Unicode」對象有沒有屬性「isoformat」

我做了一些挖掘和嘗試以下代碼:

startTime = models.DateTimeField(dateutil.parser.parse(models.TextField(db_column='startTime')) 

但現在的錯誤是AttributeError的: '文本字段' 對象有沒有屬性 '讀'。 我在做什麼錯?這甚至是正確的方法嗎?

+1

django的ORM具有非常強大的日期操作支持。我不會改變這一點。如果您有任何具體的問題,請編輯問題,看看是否有標準的方法。 – karthikr 2014-09-26 16:06:34

回答

11

由於沒有人打擾回答這個問題,它出現在谷歌搜索的頂部,這裏是保存一些額外的搜索..有人提到Django自己的日期分析模塊是最好的工作,並將ISO8601和許多其他格式轉換爲Python的datetime.datetime對象。它也是時區感知的,因此是Django項目的理想選擇。

from django.utils import dateparse 

x = '2014-09-23T18:43:26.692Z' 
y = dateparse.parse_datetime(x) 
print y 

And voila ..!

2014-09-23 18:43:26.692000+00:00 
0

看起來在Django 1.11中,我們可以將一個ISO格式字符串分配給DateTimeField。如下所示。

Lesson.objects.create(starttime='2017-04-20T12:01:00.000Z', 
         endtime ='2017-04-20T13:01:00.000Z') 
+0

django 1.11.3,這沒有奏效 – jonathanglima 2017-08-26 20:18:57