首页 > 解决方案 > 如何在多对多关系中获得独特的孩子?

问题描述

我需要列出有书籍的流派。多本书可以有相同的流派,但列表不应有重复。

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')

标签: djangodjango-models

解决方案


您可以获得至少与以下内容相关Genre的s列表: Book

Genre.objects.filter(book__isnull=False).distinct()

此处是必需的.distinct(),否则您将在查询集中获得Genre,每个相关Book

Django 将为此构造一个查询,如下所示:

SELECT DISTINCT genre.*
FROM genre INNER JOIN book_genre ON genre.id = book_genre.genre_id
WHERE book_genre.book_id IS NOT NULL

推荐阅读