2016-01-05 50 views
0

有很多類似的帖子,但沒有一個完全符合我想要的內容。我得到一個獨特的必須使用相同的字段作爲order_by,這很好。使用PostgreSQL進行命令編程並且在Django上有所不同

所以我有以下查詢:

q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1', 'field2') 

最後,我想找到在表中的field1field2所有組合的最新條目。 order_by做我認爲應該的,這很好。但是,當我做distinct我得到以下錯誤。

ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions 

歸根結底,這似乎是一個SQL問題(而不是Django的一個)。然而,看看django docs不同,它顯示什麼可以和不可以工作。它確實說

q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1') 

將工作(...和它確實)。但我不明白,當我按照與order_by相同的順序添加field2時,我仍得到相同的結果。任何幫助將不勝感激

編輯:我也注意到,如果我做

q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1', 'field2', 'tstamp') # with or without the - in the order_by 

它仍然引起了同樣的錯誤,儘管文檔建議這應該只是罰款

+0

既然你不顯示'MyModel',我們可以假設'field1','field2'和'tstamp'相對普通的領域(沒有ForeignKey或這樣的)? – Evert

+0

您的第一個示例會導致顯示的錯誤。然後,你說你的第二個例子:「當我按照與order_by相同的順序添加field2時,我仍然得到相同的結果。」同樣的結果,你的意思是與第一個例子相同的*錯誤*或者你的意思是第二個例子的(返回)結果? – Evert

+0

可能值得嘗試展示[Django生成的SQL](https://docs.djangoproject.com/en/1.9/faq/models/#how-can-i-see-the-raw-sql-queries -django-是運行)。 – Evert

回答

0

之所以能夠獲得查詢時,他們不是普通的類型使用PK公司在ORDER_BY()

q = MyModel.objects.order_by('field1__pk', 'field2__pk', '-tstamp').distinct('field1__pk', 'field2__pk') 

顯然正常運行ŧ他orderby不玩超級好。然而,使用對象的PK的似乎工作

0

測試這一項:

q = MyModel.objects.order_by('field1__id', 'field2__id', '-tstamp').distinct('field1__id', 'field2__id') 
相關問題