有没有一种简单的方法可以根据某一列中的最大/最小值筛选Django查询结果?我实际上是在特定上下文中询问此类问题,即Django的ORM,和 这些 问题 是类似的。
例如:
假设我有一个模型用于存储每个人电话号码的历史记录。
class Person(models.Model):
name = models.CharField(max_length=100)
phone = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
使用这些记录:
Person(name='Jim',phone='123-456-9870', created=datetime(2005,1,2,4,2))
Person(name='Jim',phone='329-802-9870', created=datetime(2006,9,2,7,8))
Person(name='Sue',phone='324-345-3450', created=datetime(2008,7,4,6,1))
现在假设我想找到每个人最近的电话号码。
在SQL中,通常需要使用子查询来计算最大值:
SELECT p1.name, p1.phone, p1.created
FROM person_person p1, (
SELECT name, MAX(created) AS max_created
FROM person_person
GROUP BY name
) AS p2
WHERE p1.name = p2.name AND p1.created = p2.max_created
有没有Django的机制可以简化这个过程?我正在使用PostgreSQL,所以任何依赖于PostgreSQL特定功能的想法或解决方案都将很有帮助。