Django models.Manager自定义SQL查询"返回多行"错误

时间:2017-04-23 22:15:11

标签: sql django postgresql

所以我试图从DB中的列上获取PostgreSQL上age()函数的结果。

目标是附加一个新的虚拟列,其中包含自数据库存储日期时间以来经过的年龄或时间。

我尝试通过在Django中创建models.Manager来添加这个新列:

class PriorityManager(models.Manager):
    def get_queryset(self):
        time_elapsed = RawSQL('SELECT EXTRACT(EPOCH FROM age(datetime)) AS age FROM backend_post',
                               params=(),
                               output_field=models.IntegerField())
    return super(PriorityManager, self).get_queryset().annotate(score=time_elapsed)

我需要一个分数列来帮助稍后对对象进行排序,分数基于经过的时间。

查询SELECT EXTRACT(EPOCH FROM age(datetime)) AS age FROM backend_post;在dbshel​​l中有效,但在Django上运行时会出现以下消息:

  

/ api / post / list /中的ProgrammingError由a返回的多行   用作表达式的子查询

我怀疑问题是查询返回整列元素,而models.Manager只需要一个结果。我相信应该在RawSQL查询中将某些内容作为参数发送,但我无法弄清楚它是什么......

任何人都知道该怎么做?

非常感谢!

1 个答案:

答案 0 :(得分:0)

使用

解决了这个问题

http://django-postgres-stats.readthedocs.io/

它允许django的许多自定义postgres功能,正是我需要的。不知道为什么我花了这么长时间才找到它!