Django Academy · Lezione

ForeignKey e on_delete

Modellare relazioni uno-a-molti e il comportamento alla cancellazione

Lezione 1 di 413 passaggi

ForeignKey e on_delete è una lezione Django Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Django Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Django Academy include 4 lezioni in totale.

Collegare due tabelle

I dati reali sono collegati: un libro ha un autore, un ordine ha un cliente. Una ForeignKey permette a un modello di puntare a un altro.

Relazione uno-a-molti in sintesi

Una ForeignKey rappresenta un collegamento uno-a-molti. Un autore può avere molti libri, ma ogni libro appartiene a un solo autore.

Dichiarare una ForeignKey

Aggiunga un campo di tipo ForeignKey e lo punti al modello correlato. Django memorizza il collegamento come una colonna id in background.

class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

La colonna _id

Nel database, una ForeignKey verso l'autore diventa una colonna author_id che contiene la chiave primaria dell'altra riga. Quel numero è il collegamento effettivo.

on_delete è obbligatorio

Ogni ForeignKey richiede on_delete. Indica a Django cosa fare con questa riga quando viene eliminata la riga a cui punta.

CASCADE elimina i record dipendenti

CASCADE elimina anche questa riga quando viene eliminato il record principale. Rimuovendo un autore, scompaiono anche tutti i suoi libri.

author = models.ForeignKey(Author, on_delete=models.CASCADE)

PROTECT blocca l'eliminazione

Usi PROTECT per rifiutare l'eliminazione finché esistono righe correlate. Django genera un errore invece di rimuovere il record principale.

author = models.ForeignKey(Author, on_delete=models.PROTECT)

SET_NULL conserva il record dipendente

SET_NULL conserva la riga ma cancella il collegamento, impostando la colonna su NULL. Per funzionare, il campo deve avere null=True.

author = models.ForeignKey(Author, null=True, on_delete=models.SET_NULL)

SET_DEFAULT e DO_NOTHING

SET_DEFAULT sostituisce il valore con quello predefinito del campo, mentre DO_NOTHING lascia decidere al database. Li usi solo in casi particolari.

Accedere all'oggetto correlato

Da un'istanza di libro può leggere direttamente l'autore collegato tramite il campo. Django recupera quella riga quando serve.

book = Book.objects.first()
print(book.author.name)

Filtrare attraverso il collegamento

Nei filtri, attraversi la relazione usando il doppio underscore. Può accedere direttamente ai campi del modello correlato da filter.

Book.objects.filter(author__name="Ada")

Verifica rapida

Elimina un autore, ma vuole conservare i suoi libri semplicemente scollegandoli. Quale valore di on_delete è adatto?

Riepilogo

Ottimo lavoro! Una ForeignKey rappresenta collegamenti uno-a-molti e on_delete decide il destino di ogni riga quando viene rimosso il record principale. 🔗

Gratis per iniziare

Impara Python con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «ForeignKey e on_delete» è gratuita?

Sì — il testo completo di «ForeignKey e on_delete» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Django Academy, passa a CoddyKit PRO. Il corso Django Academy include 4 lezioni in totale.

Cosa imparerò in «ForeignKey e on_delete»?

Modellare relazioni uno-a-molti e il comportamento alla cancellazione Eserciti Django Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Django Academy?

Non è richiesta alcuna esperienza precedente. Django Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «ForeignKey e on_delete»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Django Academy?

Sì. Ogni lezione Django Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. ForeignKey e on_delete
  2. ManyToManyField e modelli through
  3. OneToOneField per i profili
  4. related_name e ricerche inverse
← Torna a Django Academy