Как получить уникальных детей в отношениях многих ко многим? - PullRequest
1 голос
/ 19 мая 2019

Мне нужно составить список жанров, в которых есть книги. Несколько книг могут иметь один и тот же жанр, но в списке не должно быть дубликатов.

class Genre(models.Model):
    name = models.CharField(max_length=200, help_text='Enter a book genre (e.g. Science Fiction)')

class Book(models.Model):
    genre = models.ManyToManyField(Genre, help_text='Select a genre for this book')

1 Ответ

0 голосов
/ 19 мая 2019

Вы можете получить список Genre s, которые имеют не менее один , связанный Book с:

Genre.objects.filter(<b>book__isnull=False</b>)<b>.distinct()</b>

.distinct() являетсяздесь необходимо, так как в противном случае вы получите Genre в вашем наборе запросов, один раз для каждого связанного Book.

Django создаст для этого запрос, который выглядит следующим образом:

SELECT <b>DISTINCT</b> genre.*
FROM genre INNER JOIN book_genre ON genre.id = book_genre.genre_id
WHERE <b>book_genre.book_id IS NOT NULL</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...