我有过滤对象的问题。 在本地计算机上正常运行的代码,在服务器上不起作用。
以下是用例: 我在2014年7月创建的数据库表中有多个对象。 我需要计算在这个月和一年中创建的所有对象,所以我这样做:
number = Payment.objects.filter(time_created__year=year_created, time_created__month=month_created).count()+1
不幸的是,它总是返回1,因为过滤不起作用,它找不到7月创建的对象。
当我尝试使用shell选择对象时:
Payment.objects.filter(time_created__year=2014, time_created__month=8)
返回[]
(无结果)。我试过了:
Payment.objects.filter(time_created__year=2014)
返回多个对象。所以我想选择第一个对象:
a = Payment.objects.filter(time_created__year=2014)[0]
并试图显示其月份:
a.time_created.month
我非常惊讶,因为它返回8
你有什么想法,为什么我不能用月过滤对象?再次,它在带有Windows的本地机器上正常工作,但它不在使用linux的生产主机上。
答案 0 :(得分:3)
您必须使用Django 1.6.0或更高版本,其中USE_TZ = True是其设置文件中的默认值,当您尝试检查django工具栏上的查询时,它将如下所示:
SELECT ... FROM `app_payment` WHERE EXTRACT(MONTH FROM CONVERT_TZ(`app_ayment`.`time_created`, 'UTC', 'Asia/Kolkata')) = 8);
返回Empty set。
因此安装pytz 和使用mysql_tzinfo_to_sql加载时区表。
pip install pytz
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u -p mysql
或只是在设置文件中注释 USE_TZ = True 。