다음과 같은 모델이 있습니다.
Hikes(models.Model)
name = ...
difficulty = models.IntegerField
Regions(models.Model)
hike = models.ManyToManyField(Hikes)
이제 한 지역 내에서 가장 어려운 하이킹을 반환하려고하지만 여러 지역을 반환하는 쿼리 집합에이를 표시해야합니다. 이 작업을 수행하는 가장 좋은 방법은 "hardesthike"필드 또는 이와 유사한 것으로 각 지역에 주석을 추가하는 것이지만 코드를 알아낼 수는 없습니다. 개별 지역에서 작동하도록 코드를 가져올 수 있지만 여러 지역의 쿼리 세트에서 작동하도록 만들 수는 없습니다.
개별 지역에 대한 내 코드는 다음과 같습니다.
q = Region.objects.get(id=1)
hikes = q.hike.all().values('difficulty')
max = hikes.aggregate(Max('difficulty'))
이 새로운 값을 초기 영역에 어떻게 주석을 달 수 있습니까? "지역에서 가장 어려운 하이킹"으로 정렬 할 수 있도록 간단한 정수 형식이 바람직합니다. 또한 어떤 종류의 집계 함수를 사용하여 내 뷰에서 forloop를 수행하려고하면 내 웹 페이지가 상당히 느려지는 것을 알 수 있습니다 (DB에 10,000 개 이상의 지역 / 하이 크가 있음).
감사!
다음과 같이 주석을 달 수 있습니다.
from django.db.models import Max
Regions.objects.annotate(
max_hike=Max('hike__difficulty')
)
따라서 Region
with 에만 관심이 있다면 id=1
:
from django.db.models import Max
Regions.objects.annotate(
max_hike=Max('hike__difficulty')
).filter(pk=1)
또는 해당 Region
객체 를 검색하려면 다음을 수행하십시오 .
from django.db.models import Max
Regions.objects.annotate(
max_hike=Max('hike__difficulty')
).get(pk=1)
참고 : 일반적으로 장고 모델은 주어진 단수 때문에, 이름을
Region
대신.Regions
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다