Python 如何对多个django模型进行注释

Python 如何对多个django模型进行注释,python,mysql,django,django-queryset,django-orm,Python,Mysql,Django,Django Queryset,Django Orm,我有以下Django型号: 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)

我有以下Django型号:

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
模型用于表示用户是否拥有一本书

现在,我想返回所有图书类别的列表,按拥有最多图书的数量排序(即,最受欢迎的类别应排在第一位)

我尝试使用Django 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中执行任何计算。

您可以使用
RawSQL('any raw expression',())
作为解决方法。

在一个查询集中的聚合中重复使用列也有同样的问题。