问题描述
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类中的顺序,结果是预期的。