Django Tutorial 3 – I Modelli

Come ogni applicazione che si rispetti, abbiamo bisogno di impostare e generare la struttura dati del nostro programma. La primissima cosa da fare è quella di istruire Django ad utilizzare un database.

Per questa guida sceglieremo PostgreSQL. Per configurarlo potete seguire la guida per installare PostgreSQL.

Una volta installato e configurato il database apriamo il file settings.py e cerchiamo la riga DATABASES e modifichiamola nel modo seguente:


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'musicdb',
        'USER': 'vostro_nome',
        'PASSWORD': 'password',
        'HOST': '',
        'PORT': '',
    }
}

Dove vostro_nome e password sono l’username e la password che avete impostato nella fase di configurazione del database. Inoltre dovete creare preventivamente un database di nome “musicdb”. Per completezza spieghiamo tutti i parametri:

  • ENGINE è il modulo di django di backend che si interfaccia con lo specifico database. Scegliamo quello del nostro database.
  • NAME è il nome del database o del file nel caso di SQLite.
  • USER è il nome utente per l’accesso al db (non serve nel caso di SQLite).
  • PASSWORD è la password di accesso.
  • HOST e PORT sono i dati che indicano la posizione e la porta di accesso a db nel caso il database non sia sulla stessa macchina del server.

Assicuratevi anche che sia installato il pacchetto:

python-psycopg2

Necessario per far interfacciare python al DB.

A questo punto non ci resta che creare lo schema del database. Per fare ciò apriamo il file models.py e inseriamo una cosa del tipo:


from django.db import models

# Create your models here.
class Ruolo(models.Model) :
    descrizione = models.CharField(max_length=30)

class Artista(models.Model):
    nome = models.CharField(max_length=50)
    cognome = models.CharField(max_length=50)
    ruoli = models.ManyToManyField(Ruolo)

class Gruppo(models.Model):
    nome = models.CharField(max_length=50)
    membri = models.ManyToManyField(Artista)

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

class Traccia(models.Model):
    nome = models.CharField(max_length=50)
    durata = models.TimeField()

class Album(models.Model):
    nome = models.CharField(max_length=50)
    gruppo = models.ForeignKey(Gruppo)
    genere = models.ForeignKey(Genere)
    data = models.DateField()
    tracce = models.ManyToManyField(Traccia)

Questo file specifica la struttura delle tabelle del database. Tutto senza scrivere una sola riga di SQL. Vediamo un po il significato di alcuni campi:

  • CharField è un campo di testo semplice. Il parametro max_length specifica il numero massimo di caratteri memorizzabili nel campo.
  • ForeignKey specifica un collegamento uno-a-molti verso un altra tabella. Ad esempio un Album ha un unico Gruppo che lo suona ma un Gruppo può avere uno o più Album nella propria discografia.
  • DateField specifica una data.
  • TimeField specifica un tempo.
  • ManyToMany specifica un collegamento molti-a-molti verso un altra tabella. Ad esempio un Gruppo può avere uno o più Artisti che ne fanno parte, ma un Artista può partecipare a uno o più gruppi.

Ora, rendiamo questo modello un database vero e proprio con il comando:

python manage.py syncdb

Se tutto è andato a buon fine e il modello è valido ci verrà chiesto se vogliamo creare una zona del database per gli utenti. Diciamo di si. Ci verrà chiesto di creare il super-user, creiamolo indicando un nome e la password.

A questo punto possiamo provare il nostro database.

Apriamo la shell di django con

python manage.py shell

E all’interno digitiamo:


from musicdb.models import *
freddie = Autore(nome="Freddie, cognome="Mercury")
freddie.save()

Con pgAdmin3 possiamo facilmente vedere che il cantante è stato aggiunto nella giusta tabella.

Ebbene si. Freddie c'è.

One comment on “Django Tutorial 3 – I Modelli

  1. sono un apprendista stregone dell’ordine di Django: bel sito il tuo… ti ho scoperto grazie a linuxfeed e ora ti tengo d’occhio…