반응형
Django에서 SELECT MAX를 수행하는 방법은 무엇입니까?
필드의 최대 값을 제공하기 위해 쿼리를 실행하는 방법에 대한 개체 목록이 있습니다.
이 코드를 사용하고 있습니다.
def get_best_argument(self):
try:
arg = self.argument_set.order_by('-rating')[0].details
except IndexError:
return 'no posts'
return arg
등급은 정수입니다.
참조 이 . 코드는 다음과 같습니다.
from django.db.models import Max
# Generates a "SELECT MAX..." query
Argument.objects.aggregate(Max('rating')) # {'rating__max': 5}
기존 쿼리 세트에서도 사용할 수 있습니다.
from django.db.models import Max
args = Argument.objects.filter(name='foo') # or whatever arbitrary queryset
args.aggregate(Max('rating')) # {'rating__max': 5}
이 최대 값을 포함하는 모델 인스턴스가 필요한 경우 게시 한 코드가이를 수행하는 가장 좋은 방법 일 것입니다.
arg = args.order_by('-rating')[0]
쿼리 세트가 비어있는 경우, 즉 쿼리와 일치하는 인수가없는 경우 오류가 발생합니다 ( [0]
부분이를 발생 시키기 때문에 IndexError
). 그 행동을 피하고 대신 단순히 None
그 경우에 반환 하려면 .first()
다음을 사용하십시오 .
arg = args.order_by('-rating').first() # may return None
Django에는 또한 최신 (최대 값) 항목을 찾는 ' latest (field_name = None) '함수가 있습니다. 날짜 필드뿐만 아니라 문자열 및 정수에서도 작동합니다.
해당 함수를 호출 할 때 필드 이름을 제공 할 수 있습니다.
max_rated_entry = YourModel.objects.latest('rating')
return max_rated_entry.details
또는 모델 메타 데이터에서 해당 필드 이름을 이미 제공 할 수 있습니다.
from django.db import models
class YourModel(models.Model):
#your class definition
class Meta:
get_latest_by = 'rating'
이제 매개 변수없이 'latest ()'를 호출 할 수 있습니다.
max_rated_entry = YourModel.objects.latest()
return max_rated_entry.details
내 프로젝트에 대해 이것을 테스트했으며 O (n) 시간에서 최대 / 최소를 찾습니다.
from django.db.models import Max
#Find the maximum value of the rating, and then get the record with that rating. Notice the double underscores in rating__max
max_rating = App.objects.all().aggregate(Max('rating'))['rating__max']
return App.objects.get(rating = max_rating)
이는 전체 테이블을 정렬하고 최상위 (약 O (nlogn))를 얻는 것보다 효율적으로 최대 요소 중 하나를 얻을 수 있도록 보장합니다.
참고 URL : https://stackoverflow.com/questions/844591/how-to-do-select-max-in-django
반응형
'code' 카테고리의 다른 글
CSS 기능 / 기능 감지를 사용하여 IE11 감지 (0) | 2020.10.25 |
---|---|
VSCode가 HTML을 자동 완성하지 않음 (0) | 2020.10.25 |
파일 또는 어셈블리를로드 할 수 없습니다. HRESULT : 0x80131515 (네트워크 드라이브에 어셈블리 참조가있는 MVC 프로젝트에 컨트롤러를 추가 할 때) (0) | 2020.10.25 |
Django에서 템플릿을 사용하지 않고 JSON을 반환하려면 어떻게해야합니까? (0) | 2020.10.25 |
자바 스크립트가 \ n (0) | 2020.10.25 |