我在过滤对象时遇到问题。 在本地计算机上正常运行的代码在服务器上不起作用。
这是用例: 我在 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 生产托管上却无法正常工作。 p>
最佳答案
您必须使用 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);
返回空集。
因此,要么安装 pytz 并使用 mysql_tzinfo_to_sql 加载时区表。
pip install pytz
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u -p mysql
或者只是在设置文件中注释行USE_TZ = True。
关于django - 按创建日期的年份和月份过滤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095750/