Фильтрация запроса Django по записи с максимальным значением столбца

Есть ли простой способ отфильтровать запрос Django на основе того, какая запись имеет максимальное / минимальное значение в столбце? По сути, я задаю эти вопросы , но в конкретном контексте ORM Django.

например.

Допустим, у меня есть модель, предназначенная для хранения исторических значений всех телефонных номеров.

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, будут полезны.

8
задан Community 23 May 2017 в 12:16
поделиться