related_name и обратный поиск
Переходите по связям в обоих направлениях
«related_name и обратный поиск» — бесплатный урок Django Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Links Go Both Ways
You set a ForeignKey from book to author, but you can also walk it backward. A reverse lookup reaches the many side from the one side.
The Default _set Manager
By default Django names the reverse accessor modelname_set. From an author, the books appear as book_set.
author = Author.objects.first()
author.book_set.all()_set Is a Manager
That book_set is a full manager, so you can chain filter, order_by, and count on it just like any query.
author.book_set.filter(published=True).count()Naming with related_name
The _set name is clunky. Set related_name on the ForeignKey to pick a clearer reverse accessor yourself.
author = models.ForeignKey(Author, related_name="books", on_delete=models.CASCADE)A Cleaner Reverse
Now the reverse reads naturally. Instead of book_set you simply write books, which is far easier to follow.
author.books.all()Reverse in Queries
related_name also drives filter across the link. Use the chosen name with the double underscore from the other model.
Author.objects.filter(books__published=True)The Default Query Name
If you skip related_name, the reverse query name is the lowercase model name, like author.objects.filter(book__title=...).
Avoiding Name Clashes
Two ForeignKeys from one model to the same target collide on the reverse name. A distinct related_name on each fixes it.
writer = models.ForeignKey(User, related_name="written", on_delete=models.CASCADE)
editor = models.ForeignKey(User, related_name="edited", on_delete=models.CASCADE)Turning Off the Reverse
Set related_name to a value ending in + to disable the reverse accessor entirely when you never need it.
owner = models.ForeignKey(User, related_name="+", on_delete=models.CASCADE)related_query_name
You can split the names: related_query_name sets the filter name separately from the attribute used to read related rows.
tags = models.ManyToManyField(Tag, related_name="posts", related_query_name="post")Works for Every Relation
related_name applies to ForeignKey, ManyToManyField, and OneToOneField alike, so every reverse path can read clearly.
Quick Check
You set related_name="books" on Book's author ForeignKey. How do you list an author's books?
Recap
You did it! Reverse lookups walk a link backward, and related_name turns clunky _set accessors into clear, readable names. 🔄
Часто задаваемые вопросы
Урок «related_name и обратный поиск» бесплатный?
Да — полный текст урока «related_name и обратный поиск» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.
Чему я научусь в уроке «related_name и обратный поиск»?
Переходите по связям в обоих направлениях Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Django Academy?
Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «related_name и обратный поиск»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Django Academy?
Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- ForeignKey и on_delete
- ManyToManyField и промежуточные модели
- OneToOneField для профилей
- related_name и обратный поиск