Django Academy · Lektion

ManyToManyField og through-modeller

Forbind poster begge veje med ekstra data

Lektion 2 af 413 trin

ManyToManyField og through-modeller 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.

Begge sider har mange

Nogle gange er hver side forbundet med mange på den anden side: Et indlæg har mange tags, og et tag markerer mange indlæg. Det er en mange-til-mange-relation.

Erklær ManyToManyField

Tilføj en ManyToManyField, der peger på den anden model. Django håndterer automatisk forbindelsen i begge retninger.

class Post(models.Model):
    tags = models.ManyToManyField(Tag)

Den skjulte forbindelsestabel

I baggrunden opretter Django en forbindelsestabel, der indeholder par af id'er. Der kommer ingen ny kolonne på nogen af dine to modeller.

Tilføj relationer

Når et indlæg er gemt, kan du knytte tags til det med add. Du kan sende flere objekter på én gang i ét kald.

post.tags.add(python_tag, web_tag)

Fjern og ryd

Fjern en enkelt forbindelse med remove, eller fjern dem alle med clear. De relaterede objekter selv forbliver intakte.

post.tags.remove(web_tag)
post.tags.clear()

Læs mængden

Få adgang til forbundne rækker gennem feltet som gennem en almindelig manager. Kald all for at gennemløbe alt, der er forbundet.

for tag in post.tags.all():
    print(tag.name)

Når forbindelsen har brug for data

Hvad nu, hvis et medlemskab har sine egne oplysninger, f.eks. en tilmeldingsdato? En almindelig forbindelsestabel kan ikke indeholde ekstra kolonner, så du har brug for mere kontrol.

Modellen through

En through-model er din egen tabel til relationen. Den lader hver forbindelse have ekstra felter, som du selv definerer.

members = models.ManyToManyField(User, through="Membership")

Definér through-klassen

Through-modellen indeholder en ForeignKey til hver side samt eventuelle ekstra felter. Disse kolonner beskriver selve forbindelsen.

class Membership(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    joined = models.DateField()

add holder op med at virke

Med en tilpasset through-model er almindelig add deaktiveret. I stedet opretter du forbindelsen ved at lave en through-række direkte.

Membership.objects.create(user=u, group=g, joined=today)

Forespørgsler på tværs af M2M

Filtrér på tværs af en mange-til-mange-forbindelse med double underscore, ligesom med en ForeignKey. Forbindelsestabellen håndteres for dig.

Post.objects.filter(tags__name="python")

Hurtigt tjek

Dit gruppemedlemskab skal registrere, hvornår hver bruger blev medlem. Hvad skal du bruge?

Opsummering

Flot klaret! En ManyToManyField forbinder begge sider frit, og en through-model lader hver forbindelse indeholde sine egne data. 🏷️

Gratis at komme i gang

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 “ManyToManyField og through-modeller” gratis?

Ja — alle 3 lektioner i læringssporet Django Academy, inklusive “ManyToManyField og through-modeller”, 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 “ManyToManyField og through-modeller”?

Forbind poster begge veje med ekstra data 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 “ManyToManyField og through-modeller”?

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

  1. ForeignKey og on_delete
  2. ManyToManyField og through-modeller
  3. OneToOneField til profiler
  4. related_name og omvendte opslag
← Tilbage til Django Academy