Django Academy · Lekcja

select_related dla kluczy obcych

Łączenie powiązanych wierszy w jednym zapytaniu

Lekcja 2 z 413 kroki

select_related dla kluczy obcych to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 2 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.

Poznaj select_related

select_related nakazuje Django pobrać powiązane wiersze z wyprzedzeniem w ramach tego samego zapytania, dzięki czemu pętle nie uruchamiają dodatkowych komunikacji z bazą. ⚡

Wykorzystuje JOIN

W tle dodaje ono SQL-owy JOIN, pobierając obiekt nadrzędny i jego powiązany wiersz w ramach jednej wydajnej komunikacji z bazą danych.

Podstawowe wywołanie

Proszę przekazać nazwę powiązanego pola do select_related w queryset, a złączenie zostanie automatycznie wykonane podczas ładowania danych.

books = Book.objects.select_related('author')

Ze 101 do 1

Teraz iterowanie po tych książkach i odczytywanie każdego autora wykonuje jedno zapytanie zamiast stu jeden. Ten sam kod, ogromna różnica.

for book in books:
    print(book.author.name)

Kiedy pasuje

Proszę używać go dla pól ForeignKey i OneToOne, gdy każdy obiekt wskazuje dokładnie jeden powiązany wiersz, który można pobrać za pomocą złączenia.

Nie dla wielu

Nie działa on dla relacji wiele-do-wielu ani odwrotnych relacji jeden-do-wielu, ponieważ złączenie nie potrafi poprawnie połączyć wielu wierszy w jeden wynik.

Podążanie za łańcuchem

Można przejść przez wiele poziomów za pomocą podwójnych podkreśleń, łącząc więcej niż jeden klucz obcy w jednym zapytaniu.

Book.objects.select_related('author__publisher')

Kilka naraz

Można przekazać kilka nazw pól, aby pobrać wiele relacji jednocześnie, łącząc je w tym samym zoptymalizowanym zapytaniu.

Order.objects.select_related('customer', 'product')

To również jest leniwe

Zapytanie nadal czeka, aż rzeczywiście użyją Państwo danych, dlatego wcześniejsze łączenie filtrów i order_by pozostaje tanie i elastyczne.

Proszę uważać na szerokość

Złączenia dodają kolumny, dlatego nie należy pobierać nadmiarowych danych. Proszę pobierać tylko te relacje, z których rzeczywiście Państwo korzystają, aby wiersze pozostały niewielkie.

Warto wyrobić sobie ten odruch

Widzą Państwo dostęp do klucza obcego w pętli? Proszę najpierw sięgnąć po select_related. Szybko stanie się to naturalnym odruchem. 🎯

Szybkie sprawdzenie

Proszę wybrać właściwe narzędzie dla tej relacji.

Podsumowanie

select_related łączy dane ForeignKey i OneToOne w jednym zapytaniu, eliminując N+1 dla relacji wskazujących pojedynczy wiersz. Kolejne poziomy można łączyć za pomocą podwójnych podkreśleń. ✅

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 „select_related dla kluczy obcych” jest bezpłatna?

Tak — pełny tekst „select_related dla kluczy obcych” 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 „select_related dla kluczy obcych”?

Łączenie powiązanych wierszy w jednym zapytaniu Ć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 2 z 4.

Ile czasu zajmuje lekcja „select_related dla kluczy obcych”?

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. Rozpoznawanie problemu N+1
  2. select_related dla kluczy obcych
  3. prefetch_related dla M2M
  4. Profilowanie za pomocą Debug Toolbar
← Powrót do Django Academy