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

标签 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 生产托管上却无法正常工作。 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/

相关文章:

Django orm 子查询 - 在没有替换的子句中

python - 模型对象没有属性保存

python - Heroku:ModuleNotFoundError:没有名为 'requests' 的模块

python - 如何动态检索 Django 模型类?

python - 如何在 Django 中处理未保存的多对多关系?

django - 过滤其关系模型上没有满足特定记录的对象

django - 限制django中ManyToManyField中关系的数量

python - 在 View 中访问 c​​ontext_dict

django - 检查用户是否属于多对多关系 django

python - Django 'likes' - ManyToManyField 与新模型