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에서 어떤 계산을하고있다.
하나의 QuerySet에서 집계에서 재사용 된 열과 동일한 문제가 있습니다. –