В моих моделях классы Book
и Category
определены так:
class Category(models.Model):
name = models.CharField()
class Book(models.Model):
title = models.CharField()
categories = models.ManyToManyField(Category)
То, что я хочу, - это набор Category
экземпляров, на которые есть ссылки в поле categories
данного набора запросов Book
экземпляров.
Я понимаю, что могу перебирать набор запросов книг и собирать категории для каждой книги, но это кажется мне неэффективным, поскольку это можно было бы указать в одном запросе SQL:
SELECT DISTINCT name
FROM myapp_book_categorys JOIN myapp_category ON myapp_book_categorys.category_id=myapp_category.id
WHERE myapp_book_categorys.book_id IN
(SELECT id FROM myapp_book WHERE ...);
Является ли необработанный SQL правильным путем или существует решение более высокого уровня, сопоставимое по эффективности?