2017-09-14 4 views
1

나는이 같은 모델을 가지고 매일 매일! 다음과 같이 입력하십시오 :장고 ORM : 나는 가장 가격으로 모든 객체의 목록을 할</p> <pre><code>Class Foo(model.Models): date = models.DateField() price = models.FloatField() volume = models.IntegerField() </code></pre> <p>: 기록서 필드에 의하여 다음 각 그룹의 최대 필드 값으로 기록을 얻을 수는

{ 
    2017-01-01: {"date": 2017-01-01, "price": 1000, "volume": 210}, 
    2017-01-02: {"date": 2017-01-02, "price": 1032, "volumne": 242}, 
    . 
    . 
    . 
} 

하나의 쿼리로이 작업을 수행 할 수 있습니까? 데이터베이스가 비교적 크고 날짜에 대한 루프를 수행하는 것은 효과가 없을 것입니다.

+0

나는 전통적인 쿼리를 쉽게 충분히 보여줄 수 있었지만 장고 환경에서 작동하도록하는 방법을 찾아야했다. 원하는 경우 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very를 참조하십시오. -simple-sql-query – Strawberry

답변

2

당신은 특정 날짜

from django.db.models import Max 

Foo.objects.values('date').annotate(max_price=Max('price')) 

편집을위한 최대 가격을 얻기 위해이 같은 작업을 수행 할 수 있습니다 특정 날짜에 대한 최대의 가격이 전체 개체를 얻고 싶은 경우에, 당신은 것을 달성 할 수 OuterRefSubquery을 통해, 주어진 날짜에 대한 최대 가격 값을 가진 개체를 얻을 수있는 하위 쿼리를 만든 다음이 하위 쿼리에 의해 주요 검색어 세트를 필터링합니다

from django.db.models import Max, Subquery, OuterRef 

subquery = Foo.objects.filter(date=OuterRef('date')).order_by('-price') 
queryset = Foo.objects.filter(price=Subquery(subquery.values('price')[:1])) 

장고 1.11에서 지원. 하위 쿼리에 대한 자세한 내용은 Django docs입니다.

+0

이것은 최대 가격만을 반환합니다. 나는 최대 가격을 가진 목표를 원한다! (나는 그것의 양을 역시 원한다) – Navid777

+0

아, 재미있다. 내 대답을 업데이트했습니다. – arjun27