簡體   English   中英

如何注釋多個django模型

[英]How to annotate over multiple django models

我有以下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', ())作為解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM