#python #django #django-queryset
Вопрос:
Как мы фильтруем экземпляры модели django на основе точных значений в ManyToManyField
. Рассмотрим следующий пример: скажем, у нас есть две модели:
class Author(models.Model):
name=models.CharField(max_length=200)
class Book(models.Model):
authors=models.ManyToManyField(Author)
Я хочу отфильтровать все книги, в которых есть только заданный автор с заданными идентификаторами. Если я хочу отфильтровать набор запросов, скажем, по идентификаторам авторов 1, 2, 3
. Я пытался сделать это:
Book.objects.filter(authors__id__in=[1,2,3])
Это не работает, так как это дает мне список книг, авторы которых имеют эти идентификаторы вместе с другими авторами. Как отфильтровать книги таким образом, чтобы авторы были только в этих идентификаторах
Ответ №1:
Вы можете передать related_name
поле модели в ManyToManyField, а затем использовать его в запросе фильтра.
Class Book(models.Model):
authors = models.ManyToManyField(Author, related_name='authors')
и попробуйте выполнить запрос:
Book.objects.filter(authors__id__in=[1,2,3])