2014-09-26 57 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