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
- Rozpoznawanie problemu N+1
- select_related dla kluczy obcych
- prefetch_related dla M2M
- Profilowanie za pomocą Debug Toolbar