related_name i zapytania odwrotne
Przechodzenie przez relacje w obu kierunkach
related_name i zapytania odwrotne to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Django Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Django Academy zawiera 4 lekcji w sumie.
Powiązania działają w obu kierunkach
Ustawili Państwo ForeignKey z książki do autora, ale można również przejść w przeciwnym kierunku. Zapytanie odwrotne pozwala dotrzeć do strony „wiele” od strony „jeden”.
Domyślny manager _set
Domyślnie Django nazywa odwrotny dostęp modelname_set. Z poziomu autora książki są dostępne jako book_set.
author = Author.objects.first()
author.book_set.all()_set jest managerem
book_set jest pełnym managerem, więc można na nim łączyć filter, order_by i count tak jak w każdym zapytaniu.
author.book_set.filter(published=True).count()Nazywanie za pomocą related_name
Nazwa _set jest mało wygodna. Ustawienie related_name w ForeignKey pozwala samodzielnie wybrać czytelniejszą nazwę dostępu odwrotnego.
author = models.ForeignKey(Author, related_name="books", on_delete=models.CASCADE)Czytelniejszy dostęp odwrotny
Teraz dostęp odwrotny brzmi naturalnie. Zamiast book_set można po prostu użyć books, co znacznie ułatwia zrozumienie kodu.
author.books.all()Dostęp odwrotny w zapytaniach
related_name steruje również filter używanym do przechodzenia przez powiązanie. Z drugiego modelu należy użyć wybranej nazwy wraz z podwójnym podkreśleniem.
Author.objects.filter(books__published=True)Domyślna nazwa zapytania
Jeśli pominą Państwo related_name, nazwą zapytania odwrotnego będzie nazwa modelu zapisana małymi literami, na przykład author.objects.filter(book__title=...).
Unikanie konfliktów nazw
Dwa ForeignKey z jednego modelu do tego samego celu powodują konflikt nazwy odwrotnej. Ustawienie osobnego related_name dla każdego z nich rozwiązuje problem.
writer = models.ForeignKey(User, related_name="written", on_delete=models.CASCADE)
editor = models.ForeignKey(User, related_name="edited", on_delete=models.CASCADE)Wyłączanie dostępu odwrotnego
Ustawienie related_name na wartość kończącą się znakiem + całkowicie wyłącza dostęp odwrotny, gdy nigdy nie będzie potrzebny.
owner = models.ForeignKey(User, related_name="+", on_delete=models.CASCADE)related_query_name
Można rozdzielić te nazwy: related_query_name ustawia osobno nazwę używaną w filtrze i nazwę atrybutu służącego do odczytu powiązanych wierszy.
tags = models.ManyToManyField(Tag, related_name="posts", related_query_name="post")Działa dla każdej relacji
related_name dotyczy zarówno ForeignKey, ManyToManyField, jak i OneToOneField, dzięki czemu każda odwrotna ścieżka może mieć czytelną nazwę.
Szybkie sprawdzenie
Ustawili Państwo related_name="books" w ForeignKey autora modelu Book. Jak wyświetlić książki autora?
Podsumowanie
Udało się! Zapytania odwrotne pozwalają przechodzić przez powiązanie wstecz, a related_name zamienia nieporęczne akcesory _set na jasne, czytelne nazwy. 🔄
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „related_name i zapytania odwrotne” jest bezpłatna?
Tak — pełny tekst „related_name i zapytania odwrotne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Django Academy, przejdź na CoddyKit PRO. Kurs Django Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „related_name i zapytania odwrotne”?
Przechodzenie przez relacje w obu kierunkach Ćwiczysz Django Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Django Academy?
Nie wymagamy żadnego doświadczenia. Django Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „related_name i zapytania odwrotne”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Django Academy?
Tak. Każda lekcja Django Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- ForeignKey i on_delete
- ManyToManyField i Through Models
- OneToOneField dla profili
- related_name i zapytania odwrotne