Получение уникальных значений из набора запросов в Django? - PullRequest
1 голос
/ 28 сентября 2019

У меня довольно простая проблема.

У меня есть три модели:

class Author(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

class Publisher(models.Model):
    name = models.CharField(max_length=300)

class Book(models.Model):
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)

Пользователь может фильтровать книги и выбирает фильтр для "Publisher-A". Теперь я хочуобновить отображаемые фильтры для авторов - не показывать всех авторов, а только тех, которые опубликовали книгу с выбранным издателем.Так что мне нужно извлечь список уникальных авторов из набора запросов, я полагаю.

Я нашел этот пост - но мне это кажется взломом.Нет ли стандартного решения для этого?Проблема кажется такой простой.

Спасибо.

1 Ответ

1 голос
/ 28 сентября 2019

Вы можете получить список Author с для данного Publisher с помощью:

Author.objects.filter(<b>book__publisher=<i>my_publisher</i></b>).distinct()

Где my_publisher - издатель..distinct() гарантирует, что Author появится не более одного раза в наборе запросов.Это необходимо, если Author написал несколько книг для my_publisher.Если вы опустите .distinct(), оно появится несколько раз: ровно столько раз, сколько Author написал книгу для этого издателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...