열에 최대/최소값을 가진 레코드를 기반으로 장고 쿼리를 필터링하는 쉬운 방법이 있습니까? 나는 본질적으로 thesequestions을 요구하고있다. 그러나 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
있습니까?
필자는 백엔드에서 PostgreSQL을 사용하고 있으므로 PostgreSQL 특정 기능에 의존하는 생각이나 해결책이 도움이 될 것입니다.
django에서 원시 쿼리 SQL을 사용하지 않으면 찾고있는 것을 수행 할 수없는 것 같습니다. [this] (https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct)를 확인하십시오. 현재 작성한 order_by ('created')를 쿼리의 select에 추가하기 때문에 distinct는 아무 것도 수행하지 않습니다. – Hassek