그래서 나는 다음과 같은 쿼리를 가지고 :장고, 집계
3 영화 이상을 가지고 임의의 사람을 끌어Person.objects.annotate(film_count=Count('film')).filter(film_count__gte=3).order_by('?')[0]
. 그러나 장고 문서 (https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by-fields)에 명시된 바와 같이 ('?')를 사용한이 접근법은 매우 느리고 사용자가 자주 사용하는 쿼리입니다.
나는 그 쿼리의 전체 목록에 의해 생성 된 모든 기본 키를 가져 와서 txt 파일에 저장하고 매번 하나씩 임의로 선택하는 방법을 생각해 봅니다. 그러나 더 우아한 솔루션이 있는지 궁금합니다.
내가 다른 방법이해야 할 것 같다 :
num_persons 내 데이터베이스에서 사람의 수를, 그리고 사람이 쿼리와 일치하고DoesNotExist
오류가 발생하지 않는 경우 단순히 다시 실행
Person.objects.annotate(film_count=Count('film')).filter(film_count__gte=3).get(pk=randint(1,num_persons))
. 블록을 제외하고 시도 내
Person.objects.annotate(film_count=Count('film')).filter(film_count__gte=3).get(pk=randint(1,num_persons))
를 /와 레코드가 존재하지 않는 경우 단지 다른 임의의 숫자와 함께 다시 시도 :
당신이 내 코드를 읽거나 심지어 내가 당신이 느린 것을 나는 그것을 고려도 (당신이 언급조차 무엇을) 언급 한 것을 볼이 쿼리가 여러 번 사용됩니다거야 처음에 쓴 보았다합니다. – dl8