这是我的密码:
for i in report:
reports.append({
'total':i['vends__sum'],
'date':datetime.strptime(i['month'], "%Y-%m-%d %H:%M:%S")
})
这可以在我的OSX环境中工作(virtualenv env django 1.5)
但是,在我的生产服务器上(ubuntu12.04virtualenvDjango 1.5),它不能处理这个错误:
Django Version: 1.5.1
Exception Type: TypeError
Exception Value:
must be string, not datetime.datetime
Exception Location: /var/www/webapps/cirostats/products/templatetags/product_tags.py in show_main_chart, line 41
第41行是
‘’date‘:datetime.strptime(I’‘month’,%Y-%m-%d %H:%M:%S")
我不明白为什么要在一个环境而不是另一个环境上工作?这是谁错了,开发还是刺激?
Prod : Python 2.7.3
Dev: Python 2.7.1
更多:
这是如何提出报告的:
truncate_date = connection.ops.date_trunc_sql('month','timestamp')
qs = objects.extra({'month':truncate_date})
report = qs.values('month').annotate(Sum('vends')).order_by('month')
发布于 2013-07-01 23:21:09
在您的生产环境中,i['month']
是已经是的datetime.datetime
对象:
>>> import datetime
>>> example = u'2013-06-01 00:00:00'
>>> example = datetime.datetime.strptime(example, "%Y-%m-%d %H:%M:%S")
>>> example = datetime.datetime.strptime(example, "%Y-%m-%d %H:%M:%S")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be string, not datetime.datetime
因此,要找到生产环境和开发环境之间的区别,您必须跟踪生成report
的内容,并找出为什么一个环境生成字符串,而另一个环境则生成datetime.datetime
对象。
如果您在服务器后端上使用日期时间操作,请考虑到一些SQL服务器支持本机日期时间算法,但是SQLite (您通常针对的数据库)不支持。PostgreSQL将生成datetime
对象,SQLite将生成字符串。
您可能希望根据数据库设置在这里切换处理日期的方式,或者检测是否已经有了datetime
对象并跳过解析。
发布于 2013-07-01 23:26:21
strptime会产生一个datetime对象,在您的调试环境中,它是可打印的,对于生产,您需要将它更改为:
datetime.strptime(i['month'], "%Y-%m-%d %H:%M:%S").format('how you would like to display it')
但是,由于通常使用strptime从字符串将日期/时间转换为datetime对象,所以我不确定为什么不直接使用字符串。即“日期”:我“月份”
https://stackoverflow.com/questions/17419663
复制相似问题