所以我试图从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;
在dbshell中有效,但在Django上运行时会出现以下消息:
/ api / post / list /中的ProgrammingError由a返回的多行 用作表达式的子查询
我怀疑问题是查询返回整列元素,而models.Manager只需要一个结果。我相信应该在RawSQL查询中将某些内容作为参数发送,但我无法弄清楚它是什么......
任何人都知道该怎么做?
非常感谢!
答案 0 :(得分:0)
使用
解决了这个问题http://django-postgres-stats.readthedocs.io/
它允许django的许多自定义postgres功能,正是我需要的。不知道为什么我花了这么长时间才找到它!