Django Related Name - выбор и использование связанных объектов
Django related name - это опция, используемая для задания имен связей между моделями, которые могут иметь несколько взаимосвязанных связей. Это позволяет использовать более читаемые и осмысленные имена, которые будут использоваться в коде, вместо автоматически сгенерированных имен.
Опция related name определяется в поле ForeignKey, ManyToManyField или OneToOneField в модели, которая ссылается на другую модель. Она позволяет задать пользовательское имя для поля обратного связанного объекта, которое будет использоваться для доступа к этому объекту.
Например, мы можем определить модель Book и модель Author, где книга может быть написана несколькими авторами, и каждый автор может иметь несколько книг. В этом случае мы будем использовать ManyToManyField, чтобы связать модели:
class Author(models.Model):
name = models.CharField(max_length=50)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, related_name='books')
Здесь мы определяем связи many-to-many между моделями Book и Author. Также мы используем опцию related_name, чтобы задать пользовательское имя для объекта обратной связи. В данном случае мы называем этот объект books, что означает, что мы можем получить все книги автора, используя этот атрибут:
author = Author.objects.get(name='John Doe')
books = author.books.all()
Здесь мы получаем объект автора John Doe и затем используем атрибут books, чтобы получить все книги, написанные им.
Также можно использовать related_name для определения имени обратной связи в OneToOneField, ForeignKey и др. Опция related_name дает возможность удобного доступа к связанным объектам и повышает читаемость кода.