有很多类似的帖子,但没有一个完全符合我想要达到的目标。我明白必须使用与order_by相同的字段,这很好。
所以我有以下问题:
q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1', 'field2')
最终,我正在尝试在表格中找到field1
和field2
的所有组合的最新条目。 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')
将起作用(......确实如此)。但我不明白,当我按照field2
中的相同顺序添加order_by
时,我仍会得到相同的结果。任何帮助将不胜感激
编辑:我还注意到,如果我这样做
q = MyModel.objects.order_by('field1', 'field2', '-tstamp').distinct('field1', 'field2', 'tstamp') # with or without the - in the order_by
它仍会引发同样的错误,尽管文档表明这应该可以正常工作
答案 0 :(得分:0)
能够通过在order_by()中使用pk来正常运行查询
q = MyModel.objects.order_by('field1__pk', 'field2__pk', '-tstamp').distinct('field1__pk', 'field2__pk')
显然,当他们不是普通类型时,orderby不会发挥超级好看。但是,使用对象的pk似乎可以正常工作
答案 1 :(得分:0)
测试一下:
q = MyModel.objects.order_by('field1__id', 'field2__id', '-tstamp').distinct('field1__id', 'field2__id')