Con questa lezione iniziamo ad occuparci della creazione e della persistenza del modello dei dati secondo Django. Abbiamo già accennato alla presenza della Model API, la libreria che implementa l'Object-Relational Mapping (ORM) in Django e che ci permette di definire e gestire le tabelle dei nostri database utilizzando semplici oggetti Python.
Model è anche il nome della classe di riferimento che utilizziamo per rappresentare il database. Infine, per praticità, chiamiamo "Model" anche tutte le classi che creiamo per rappresentare le singole tabelle e che derivano tutte della classe base (django.db.models.Model
).
Quindi diciamo che con Django possiamo utilizzare una serie di Model per rappresentare le tabelle del database, le relazioni e le operazioni sui dati. Per convenzione, ogni attributo di una classe "Model" rappresenta un campo della tabella sul database.
Tutti i Model utilizzati in un'applicazione, ad esempio app
, sono definiti in un unico file, models.py
, contenuto nella cartella app
.
Per chiarire questi concetti vediamo un caso pratico. Supponiamo di voler modellare l'entità "Cellulare" sul nostro database.
Apriamo il file models.py
e descriviamo una classe Cellulare
che estende la classe Model
del namespace models
. I nostri attributi saranno marca
, modello
e imei
.
from django.db import models class Cellulare(models.Model): marca = model.CharField(max_length=30) modello = model.CharField(max_length=20) imei = model.CharField(max_length=18)
I nomi degli attributi definiscono anche le colonne della tabella Cellulare
sul database, e tutte saranno di tipo VARCHAR
. Se volessimo creare la stessa tabella con SQL scriveremmo:
CREATE TABLE app_cellulare ( "id" int auto_increment NOT NULL PRIMARY KEY, "marca" varchar(30) NOT NULL, "modello" varchar(20) NOT NULL, "imei" varchar(18) NOT NULL );
Torneremo sui tipi di dato più avanti, intanto soffermiamoci sulle convenzioni:
- il nome della tabella,
app_cellulare
, è automaticamente generato concatenando il nome dell'applicazione al nome delModel
(minuscolo) preceduto da underscore (_
) - il campo id è generato automaticamente e rappresenta la chiave primaria della tabella
- il formato del comando
CREATE TABLE
dell'esempio rispetta il dialetto MySQL ma può variare a seconda della tipologia di database definita in nel filesettings.py
Ora che abbiamo definito il modello, dobbiamo configurare Django per utilizzarlo. Per farlo dobbiamo modificare il file settings.py
e, supponendo che il modello sia definito nell'applicazione app
del sito miosito, aggiungere l'applicazione miosito.app
ad INSTALLED_APPS
. Ricordiamo che una volta inserita l'applicazione nel sito, vengono automaticamente importati i suoi model nel database.
INSTALLED_APPS = ( #... 'miosito.app', #... )
Per fissare sul database lo schema stabilito dal modello utilizziamo il comando syncdb
, che nel nostro caso crea la tabella app_cellulare
:
manage.py syncdb
La prima volta che eseguiamo la sincronizzazione del database ci viene chiesto se desideriamo creare un utente superuser
. Questo utente viene utilizzato per accedere all'interfaccia di amministrazione del sito, come vedremo più avanti, quindi possiamo crearlo e tenerlo da parte.
Per controllare la correttezza del modello possiamo usare il comando:
manage.py validate
che restituisce il numero di errori del modello.