0Pricing
Django Academy · Lekcja

prefetch_related dla M2M

Wydajne grupowe ładowanie danych wiele-do-wielu

prefetch_related dla M2M to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 3 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 prefetch_related

prefetch_related obsługuje relacje, których nie można pobrać za pomocą złączenia, takie jak wiele-do-wielu i relacje odwrotne, wykorzystując inteligentne grupowanie zapytań. 📦

Dwa zapytania zamiast wielu

Zamiast jednego ogromnego złączenia wykonywane jest drugie zapytanie dotyczące powiązanych wierszy, a następnie Django dopasowuje je w Pythonie.

Podstawowe wywołanie

Proszę przekazać nazwę relacji do prefetch_related, tak jak wcześniej, a Django automatycznie pogrupuje odwołania.

authors = Author.objects.prefetch_related('books')

Dlaczego dwa zapytania są lepsze niż N+1

Jedno zapytanie o autorów i jedno o wszystkie ich książki oznacza łącznie dwa odwołania do bazy, niezależnie od liczby autorów przetwarzanych w pętli.

for author in authors:
    print(author.books.count())

Najlepsze rozwiązanie dla wielu

Proszę sięgać po to rozwiązanie, gdy każdy obiekt jest powiązany z wieloma wierszami: pola wiele-do-wielu i odwrotne klucze obce pasują idealnie.

Relacje odwrotne również działają

To rozwiązanie świetnie sprawdza się przy odwrotnych akcesorach, na przykład gdy autor pobiera wszystkie swoje książki, z czym select_related nie może pomóc.

Łączenie obu narzędzi

Można połączyć oba mechanizmy optymalizacji w jednym queryset, używając każdego z nich dla najlepiej obsługiwanego typu relacji.

Book.objects.select_related('author').prefetch_related('tags')

Kontrola za pomocą Prefetch

Obiekt Prefetch pozwala filtrować lub sortować pobierane powiązane wiersze, zapewniając szczegółową kontrolę.

from django.db.models import Prefetch
Author.objects.prefetch_related(
  Prefetch('books', queryset=Book.objects.filter(year=2024)))

Wykonywane w Pythonie

Dopasowanie odbywa się w Pythonie, a nie w SQL. Dzięki temu unika się eksplozji liczby wierszy, którą spowodowałoby duże złączenie wiele-do-wielu.

Ostrożnie z filtrowaniem wewnątrz pętli

Wywołanie filter na wcześniej pobranym zbiorze wewnątrz pętli ponownie uruchamia nowe zapytania. Użyj Prefetch, aby zachować korzyści z grupowania zapytań.

Dwa narzędzia, jeden cel

select_related służy do pojedynczych powiązań, a prefetch_related do wielu. Razem eliminują problem N+1 w niemal każdym widoku. 🚀

Szybkie sprawdzenie

Wybierz odpowiedni optymalizator dla tego przypadku.

Podsumowanie

prefetch_related grupuje powiązania wiele-do-wielu i odwrotne w drugim zapytaniu, a następnie dopasowuje je w Pythonie. Połącz je z select_related, aby uzyskać pełną optymalizację. ✅

Często zadawane pytania

Czy lekcja „prefetch_related dla M2M” jest bezpłatna?

Tak — pełny tekst „prefetch_related dla M2M” 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 „prefetch_related dla M2M”?

Wydajne grupowe ładowanie danych wiele-do-wielu Ć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 3 z 4.

Ile czasu zajmuje lekcja „prefetch_related dla M2M”?

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