2014-09-18 1 views
3

I가 다음 장고 모델 :이상의 주석을 어떻게 여러 장고 모델

class Book(models.Model): 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=200) 

    class Meta: 
     db_table = "books" 

class BookCategory(models.Model): 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=50) 

    class Meta: 
     db_table = "bookcategories" 

class BookCategoryMembership(models.Model): 
    id = models.AutoField(primary_key=True) 
    category = models.ForeignKey(BookCategory) 
    book = models.ForeignKey(Book) 

    class Meta: 
     db_table = "bookcategories_books" 

class UserBook(models.Model): 
    id = models.AutoField(primary_key=True) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True) 
    book = models.ForeignKey(Book) 

    class Meta: 
     db_table = "user_book" 

UserBook 모델은 사용자가 책을 소유하는 경우 표시하기 위해 사용된다.

이제 모든 도서 카테고리의 목록을 가장 많이 소유 한 도서 (즉, 가장 인기있는 카테고리가 먼저 나와야 함)의 수로 정렬하여 반환하려고합니다.

장고 ORM 주석을 사용해 보았지만 제대로 작동하지 못했습니다.

작동하지 않습니다 부질입니다 :
BookCategoryMembership.objects.annotate(num_books=Count("book__userbook")). 
values('category_id').annotate(Sum('num_books')) 

이 (

FieldError: Cannot compute Sum('num_books'): 'num_books is an aggregate" 

나는이 하위 쿼리에서의 order_by 절은 아직 행방 불명입니다 알고 오류 메시지의 결과로,하지만 난 가정 우선 하위 쿼리를 가져와야합니다.

django에서이 문제를 해결할 수있는 쿼리를 알고 계십니까? 여러 쿼리로 분할하지 않거나 django에서 어떤 계산을하고있다.

+0

하나의 QuerySet에서 집계에서 재사용 된 열과 동일한 문제가 있습니다. –

답변

0

해결 방법으로 RawSQL('any raw expression',())을 사용할 수 있습니다.