Я разрабатываю приложение для продажи книг на 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 сериализуемый
Как я могу выполнить sh это?