我正在 Django 上开发一个图书销售应用程序,我需要从所售图书中获取最受欢迎的图书类别列表。
楷模:
class Category(models.Model):
id = models.BigAutoField(primary_key=True)
name = models.TextField()
class Book(models.Model):
id = models.BigAutoField(primary_key=True)
name = models.TextField()
class BookCategory(models.Model):
id = models.BigAutoField(primary_key=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
class Sales(models.Model):
id = models.BigAutoField(primary_key=True)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
以下 SQL 相当于我的要求,但我不知道如何使用 Django 模型和过滤来使用它。
sql = "SELECT c.* FROM category c
INNER JOIN book_category bc ON c.id = bc.category_id
INNER JOIN sales s ON s.book_id = bc.book_id
GROUP BY c.id
ORDER BY count(s.id) DESC"
我已使用以下代码行来执行此操作,但出现错误。
categories = Category.objects.raw(sql)
“RawQuerySet”类型的对象不是 JSON 可序列化的
我怎样才能做到这一点?