Django Academy · Lekcja

related_name i zapytania odwrotne

Przechodzenie przez relacje w obu kierunkach

Lekcja 4 z 413 kroki

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. 🔄

Bezpłatny start

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

  1. ForeignKey i on_delete
  2. ManyToManyField i Through Models
  3. OneToOneField dla profili
  4. related_name i zapytania odwrotne
← Powrót do Django Academy