Django-MAX ...通过ForeignKey自身的GROUP BY

问题描述

我有一个与此相似的模型:

class Tree(models.Model):
   description = models.CharField(max_length = 255,null = False,blank = False)
   parent = models.ForeignKey("Tree",null = True,blank = True,on_delete = models.CASCADE)
   
   class Meta:
     ordering = ['description','-id']

我需要查找每个父母的最新记录。

我尝试过:

latests = Tree.objects.values("parent").annotate(last = Max("pk"))

结果不正确,因为SQL查询为:

SELECT parent_id,MAX(id) AS last FROM tree GROUP BY id;

ORM将外键转换为源,并且不使用字段内的值。 有没有办法不“跟随”外键而是改用字段的值?

该模型在Postgresql数据库生成具有三列的名为tree的表:

Column      | Type
------------+-----------------------
id          | integer
description | character varying(255)
parent_id   | integer

使用此数据:

id  | description | parent_id
----+-------------+----------
1   | A           | 1
2   | B           | 2
3   | C           | 1 
4   | D           | 1
5   | E           | 2 

我想要这个结果:

last | parent_id
-----+----------
   5 |         2
   4 |         1

我可以使用以下命令在sql中轻松完成此操作

select max(id) as last,parent_id from tree group by parent_id

解决方法

最后,我发现了一个可能的解决方法:我删除了Meta类中的顺序,结果是预期的。