2017-04-23 76 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查詢中作爲參數發送,但我不知道它是什麼...

任何人都知道該怎麼辦?

非常感謝!

回答