【发布时间】:2019-01-27 02:28:56
【问题描述】:
我在 PyCharm 中使用 ipython (Python 3.7) 控制台。我正在尝试运行一个 Django ORM 查询,我想在其中进行一些日期数学运算,专门计算秒数并将其与另一个字段进行比较。我试过了
Article.objects.filter(article_stat__elapsed_time_in_seconds=(round(datetime.now(timezone.utc) - F("created_on")) / 300) * 300)
但我收到以下错误
Traceback (most recent call last):
File "/Users/davea/Documents/workspace/mainpage_project/venv/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3267, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-18-607b95229a28>", line 1, in <module>
Article.objects.filter(article_stat__elapsed_time_in_seconds=(round(datetime.now(timezone.utc) - F("created_on")) / 300) * 300)
TypeError: type CombinedExpression doesn't define __round__ method
这是有问题的模型...
class Article(models.Model):
...
created_on = models.DateTimeField(default=datetime.now)
如何克服“TypeError: type CombinedExpression does not define round method”错误?
【问题讨论】:
-
您使用的是什么数据库?您将 Python 代码(四舍五入)与 Django 拼写 SQL 过滤器的方式混合在一起。
datetime.now(timezone.utc) - F("created_on")表达式转换为 SQLWHERE过滤器,必须在在该级别进行舍入。
标签: python django python-3.x orm rounding