Вы можете использовать related_name
в поле ForeignKey для достижения этой цели.Например, у вас есть следующие модели:
class Author(models.Model):
name = models.CharField(max_length=128)
class Book(models.Model):
name = models.CharField(max_length=128)
author = models.ForeignKey(Author, related_name='books', on_delete=models.CASCADE)
Теперь для доступа ко всем книгам автора запрос будет Author.books.all()
.Обратите внимание, что модель Author
не имеет атрибута books
.Но в author
поле ForeignKey (которое ссылается на модель Author
) модели Book
имеет аргумент related_name и его значение равно books .Это означает, что книги автора можно получить по модели Author
.Django прекрасно с этим справляется.
Кроме того, вы можете использовать select_related
для оптимизации (в этом случае вам не нужно использовать аргумент related_name
): Book.objects.all().select_related('author')