Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Definire le relazioni

Definire nei modelli le relazioni tra le tabelle del database
Definire nei modelli le relazioni tra le tabelle del database
Link copiato negli appunti

In questa lezione ci occupiamo di definire, mediante i modelli, i tre classici tipi di relazione tra entità del database: uno-a-molti, molti-a-molti e uno-a-uno.

Uno a molti

Per stabilire la relazione uno-a-molti tra le classi del modello, dobbiamo assegnare il tipo ForeignKey ad un attributo di una classe derivata da Model. Il costruttore di ForeignKey richiede di specificare la classe che rappresenta la tabella con cui stabilire la relazione.

Facciamo subito un esempio: alla classe Cellulare vogliamo associare una sola Marca e dire che una Marca costruisce molti elementi Cellulare. Vediamo come esprimere questa relazione:

class Cellulare(models.Model):
    marca = models.ForeignKey(Marca)
    modello = models.CharField(max_length=20)

class Marca(models.Model):
    descrizione = models.CharField(max_length=30)

In questo modo è possibile anche definire relazioni ricorsive.

Molti a molti

Per definire relazioni molti-a-molti, dobbiamo utilizzare il tipo ManyToManyField, anche in questo caso specifichiamo la classe di riferimento. È sufficiente utilizzare il tipo ManyToManyField in solo una delle due classi "Model" coinvolte nella relazione.

Consideriamo ad esempio la relazione tra Cellulare e ComponenteElettrico: un cellulare contiene più componenti elettrici e un componente elettrico è presente in più cellulari.

class Cellulare(models.Model):
  componentiElettrici = models.ManyToManyField(ComponenteElettrico)

class ComponenteElettrico(models.Model):
  matricola = models.CharField(max_length=12)

Anche mediante ManyToManyField è possibile definire relazioni ricorsive.

Uno a uno

La definizione di relazioni uno-a-uno è molto semplice, il tipo da utilizzare è OneToOneField, e la modalità è analoga alle precendenti.

Relazioni tra applicazioni diverse

È possibile mettere in relazione un modello con un altro definito in un'altra applicazione. Per fare questo è necessario importare esplicitamente il modello, come nell'esempio seguente:

from miosito.altraapplicazione.models import altromodello

class MioModello(models.Model):
  altromodello = models.ForeignKey(altromodello)

Ti consigliamo anche