Django Academy · Oppitunti

prefetch_related M2M-relaatioille

Lataa many-to-many-tiedot tehokkaasti erissä

Oppitunti 3/413 vaihetta

prefetch_related M2M-relaatioille on ilmainen Django Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Django Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Django Academy-kurssilla on yhteensä 4 oppituntia.

Tutustu prefetch_related-toimintoon

prefetch_related käsittelee suhteet, joihin liitos ei pysty, kuten many-to-many-suhteet ja käänteiset linkit, älykkään erähaun avulla. 📦

Kaksi kyselyä, ei montaa

Yhden valtavan liitoksen sijaan se suorittaa toisen kyselyn liittyville riveille ja yhdistää ne sitten Pythonissa.

Peruskutsu

Välitä suhteen nimi prefetch_related-kutsulle kuten aiemmin, niin Django kokoaa haut automaattisesti eriksi.

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

Miksi kaksi on parempi kuin N+1

Yksi kysely kirjailijoille ja yksi kaikille heidän kirjoilleen tarkoittaa yhteensä kahta yhteyttä riippumatta siitä, kuinka monta kirjailijaa käyt silmukassa läpi.

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

Paras monille riveille

Käytä sitä aina, kun kukin olio liittyy useisiin riveihin: many-to-many-kentät ja käänteiset vierasavaimet sopivat siihen erinomaisesti.

Käänteiset suhteet toimivat

Se on erityisen hyödyllinen käänteisissä viittauksissa, kuten kirjailijan kaikkien kirjojen hakemisessa, johon select_related ei yksinkertaisesti sovellu.

Molempien työkalujen yhdistäminen

Voit ketjuttaa molemmat optimoijat samaan querysettiin ja käyttää kumpaakin sille parhaiten sopivassa suhdetyypissä.

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

Hallitse Prefetchilla

Prefetch-olion avulla voit suodattaa tai järjestää haettavat liittyvät rivit ja hallita hakua tarkasti.

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

Suoritetaan Pythonissa

Yhdistäminen tapahtuu Pythonissa, ei SQL:ssä. Siksi vältetään rivien räjähdysmäinen kasvu, jonka suuri many-to-many-liitos aiheuttaisi.

Suodata silmukan sisällä harkiten

Jos kutsutte filter-metodia esiladatulle joukolle silmukan sisällä, se tekee jälleen uusia kyselyitä. Käyttäkää Prefetchia, jotta eräkäsittelyn hyöty säilyy.

Kaksi työkalua, yksi tavoite

select_related yksittäisille yhteyksille ja prefetch_related useille yhteyksille. Yhdessä ne poistavat N+1-ongelman lähes mistä tahansa näkymästä. 🚀

Pikatarkistus

Valitkaa tähän tilanteeseen sopiva optimoija.

Kertaus

prefetch_related kokoaa many-to-many- ja käänteiset yhteydet toiseksi kyselyksi ja yhdistää tulokset Pythonissa. Käyttäkää sitä yhdessä select_relatedin kanssa kattavan ratkaisun saamiseksi. ✅

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”prefetch_related M2M-relaatioille” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Django Academy-oppimispolun 3 oppituntia, myös oppitunnin “prefetch_related M2M-relaatioille”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Django Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”prefetch_related M2M-relaatioille”?

Lataa many-to-many-tiedot tehokkaasti erissä Harjoittelet Django Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Django Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Django Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”prefetch_related M2M-relaatioille”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Django Academy-oppitunnilla?

Kyllä. Jokainen Django Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. N+1-ongelman tunnistaminen
  2. select_related ForeignKey-kentille
  3. prefetch_related M2M-relaatioille
  4. Profilointi Debug Toolbarilla
← Takaisin: Django Academy