2017-04-23 75 views
0

所以我试图从数据库中的一列中获取PostgreSQL的age()函数的结果。Django models.Manager自定义SQL查询“多于一行返回”错误

目标是追加一个新的虚拟列,其中包含自从存储数据库的日期时间起过去的年龄或时间。

我想这在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上运行它时,下面的消息出现:

ProgrammingError在/ API /后/列表/被用作 子查询返回多行一个表达式

我怀疑问题是查询返回一整列元素,而models.Manager只有一个结果。我相信应该有一些在RawSQL查询中作为参数发送,但我不知道它是什么...

任何人都知道该怎么办?

非常感谢!

回答