select_related til Foreign Keys
JOIN relaterede rækker i én forespørgsel
select_related til Foreign Keys er en gratis Django Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Django Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Django Academy-kurset indeholder 4 lektioner i alt.
Mød select_related
select_related fortæller Django, at relaterede rækker skal hentes på forhånd i den samme forespørgsel, så løkker ikke udløser ekstra ture. ⚡
Det bruger en JOIN
Under overfladen tilføjer det en SQL-JOIN, som henter det overordnede objekt og dets relaterede række sammen i én effektiv tur.
Det grundlæggende kald
Send navnet på det relaterede felt til select_related på dit queryset, så sker sammenføjningen automatisk, når dataene indlæses.
books = Book.objects.select_related('author')Fra 101 til 1
Nu udfører en løkke over bøgerne, hvor du læser hver forfatter, én enkelt forespørgsel i stedet for 101. Samme kode, enorm gevinst.
for book in books:
print(book.author.name)Hvornår det passer
Brug det til felter af typen ForeignKey og OneToOne, hvor hvert objekt peger på præcis én relateret række, som en sammenføjning kan hente.
Ikke til mange
Det fungerer ikke til mange-til-mange-forbindelser eller omvendte en-til-mange-forbindelser, fordi en sammenføjning ikke kan samle mange rækker på en enkel måde.
Følg kæden
Du kan gå gennem flere led med dobbelte understregninger og sammenføje på tværs af mere end én fremmednøgle i en enkelt forespørgsel.
Book.objects.select_related('author__publisher')Flere på én gang
Send flere feltnavne for at hente flere relationer sammen, alt sammen samlet i den samme optimerede forespørgsel.
Order.objects.select_related('customer', 'product')Det er også dovent
Forespørgslen venter stadig, til du faktisk bruger dataene, så det er billigt og fleksibelt fortsat at kæde filtre og order_by sammen før den.
Vær opmærksom på bredden
Sammenføjninger tilføjer kolonner, så vælg ikke for meget. Hent kun de relationer, du faktisk læser, så hver række forbliver kompakt.
En refleks, der er værd at opbygge
Ser du en fremmednøgle blive tilgået i en løkke? Brug først select_related. Det bliver hurtigt en naturlig vane. 🎯
Hurtigt tjek
Vælg det rigtige værktøj til denne relation.
Opsummering
select_related sammenføjer ForeignKey- og OneToOne-data i én forespørgsel og fjerner N+1 for forbindelser til én række. Kæd flere led sammen med dobbelte understregninger. ✅
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “select_related til Foreign Keys” gratis?
Ja — alle 3 lektioner i læringssporet Django Academy, inklusive “select_related til Foreign Keys”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Django Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “select_related til Foreign Keys”?
JOIN relaterede rækker i én forespørgsel Du øver dig i Django Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Django Academy?
Der kræves ingen tidligere erfaring. Django Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “select_related til Foreign Keys”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Django Academy-lektion?
Ja. Alle Django Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Find N+1-problemet
- select_related til Foreign Keys
- prefetch_related til M2M
- Profilering med Debug Toolbar