2014-06-06 2 views
3

3 가지 모델이 있습니다 : 포럼, 스레드, 포스트 그리고 포럼 목록을 표시하는보기를 만듭니다. 하지만 각 포럼의 스레드 수와 게시물 수를 표시하려고합니다.Django 집계, 합계

  • 내가 여기 비슷한 발견

각 포럼에 대한

  • 합계 각 스레드 각 스레드의 게시물의 수를 게시물의 수를 계산 :

    난 다음에이 Django: Sum the count of a sub sub foreign object을 하지만 대답은 나를 위해 작동하지 않습니다.

    from django.shortcuts import render 
    from django.template import Context 
    from django.contrib.auth.decorators import login_required 
    from django.db.models import Count 
    
    from chinwag.models import Forum, Thread, Post 
    
    @login_required 
    def forums(request): 
        forums = Forum.objects.annotate(num_posts=Count('threads__posts')).all(
          ).select_related('threads__last_post') 
        return render(request, 'chinwag/forums.html', Context({ 
         'forums': forums, 
        })) 
    

    1 개의 SQL 쿼리에서 수행 할 수 있습니까? 방법? 내가 제대로 이해하면

  • 답변

    5

    , 당신은

    Forum.objects.annotate(num_threads=Count('threads__id'), 
             num_posts=Count('threads__posts__id')) 
    

    사용할 수 있습니다 이것은 하나의 데이터베이스 히트에 두 개의 주석을 수 있습니다.

    첫 번째 카운트를 포럼의 모든 스레드, 두 번째 카운트 Form와 외래 키 같은 thread 가정 포럼 (모든 스레드 모든 게시물 및 threadspostForeignKey.

    정확한 이름에 'threads__posts__id'은 외부 키의 이름에 따라 달라집니다하지만이 올바르지 않은 경우 장고 제안 오류를 뱉어 것입니다. 당신이 .all()을 제거 할 수 있습니다

    PS, 그것은 아무것도 아니다.

    +0

    고마워, 그것은 매력처럼 일했다. :) – valentin