1
다른 테이블에서 계산 달성하기 위해서는 'Person'의 주어진 목록을 얻는 것, 적어도 하나의 결과를 제공하고 프로그램 수준에서 계산하는 프로그램. 순간 장고의 검색어 최적화 한 테이블의 집계는 다음과 같은 모델에 의해 정의 우리는 키와 값의 데이터 저장소를
, 무슨 내가 한 것은 다음 내 given_group이 사람의 백만이 포함 된 경우 그것 (2 초 생각)하지만 작업을 수행하는 가장 쉬운 방법입니다def my_function(given_group):
persons = Person.objects.filter(group=given_group)
programs = Program.objects.all()
given_results = {}
for program in programs :
given_results[program.name] = 0
for person in persons :
# if the program gave at least one result to the person
if Result.objects.filter(program=program, person=person).exists() :
given_results[program.name] += 1
else:
continue
return given_results
, 즉에 끔찍한 방법입니다 해.
내 마음에 온 다른 솔루션은 select_related/prefetch_related 사용하는 것입니다하지만 난 존재로 (이를 사용하는 방법을 알아낼) 또는 LIMIT 상당 수 없습니다 [1]
가이 사람이 좋은이 있습니까 몇 가지 요청으로 동일한 결과를 얻으려는 제안? 당신은 전혀 관련 테이블을 쿼리하지 않으
given_results = Result.objects.filter(person__group=given_group).values('program__program_name').annotate(total=Count('person', distinct=True))
거의 그게 사실입니다. '프로그램에 얼마나 많은 결과가 있습니까?' '프로그램이 몇 번이나 결과를 냈습니까?' 그래서 한 프로그램이 10 명의 결과를 한 사람에게 주면 나는 1로 계산하고 싶습니다. –