Как правильно написать ORM запрос DJANGO

SELECT * FROM category WHERE category.id not in (SELECT category_id from news)

Есть SQL запрос, который нужно переписать для ORM, как - пока не знаю

Задание: Categories, у которых нет соответствия в таблице News

Отношение Categories : News --- ManyToMany


Ответы (1 шт):

Автор решения: Alioshca Z

Попробуйте поиграться с методом exclude в queryset. Сначала делаете запрос на все айдишники, которые есть в News. Затем все их исключаете в запросе к Categories.

class Categories(models.Model):
    some_field = models.CharField(max_length=100)

class News(models.Model):
    category_id = models.IntegerField()
    m2m = models.ManyToManyField(to=Categories)

q1 = News.objects.only('category_id').all() #сначала запрос на все category_id из News

query = Categories.objects.exclude(id__in=q1).all() #затем исключить все найденные category_id из Categories

Если у вас many2many связь наоборот - в классе Categories, то поменяйте классы в запросах соответственно.

→ Ссылка