按创建日期的年份和月份过滤对象

时间:2014-08-02 13:53:33

标签: django django-models django-orm

我有过滤对象的问题。 在本地计算机上正常运行的代码,在服务器上不起作用。

以下是用例: 我在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的生产主机上。

1 个答案:

答案 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

相关问题