MODELLI E MIGRAZIONI

Vedremo in questo post dopo la creazione di un’applicazione di news, come sia possibile definire tramite classi e OOP entità (classi) cheDjango vanno a rappresentare il modello concettuale della nostra App. Lo faremo andando a scrivere il file models.py della nostra applicazione. Una volta scritto il modello concettuale e stabilite le sue relazioni creeremo il database Sqlite tramite il meccanismo delle migrazioni.

models
models
models

Iniziamo con la creazione di un nuovo ambiente virtuale, dopo aver creato la cartella radice che io ho chiamato secondlevel. Impartiamo i seguenti comandi per creare ed attivare l’ambiente.

python -m venv venv (creazione ambiente venv)

venv\Scripts\activate (attivazione di venv)

Dopo aver creato l’ambiente virtuale installiamo Django con il comando:

pip install django

Adesso creiamo il progetto con il seguente comando:

django-admin startproject DjangoSecondLevel

Io ho immesso come nome del progetto DjangoSecondLevel tu puoi scegliere un nome qualunque. A questo punto avviamo il server di sviluppo per controllare che tutto stia funzionando correttamente. Posizioniamoci nella directory contenente manage.py e facciamo partire il server.

python manage.py runserver

Come puoi vedere l’installazione è andata a buon fine, tuttavia c’è un piccolo dettaglio da sistemare. La lingua. Rechiamoci nel file settings.py del progetto e scorrendo in basso andiamo a trovare la voce LANGUAGE_CODE. Impostiamo questo valore su “it”. Facciamo ripartire il server e questa volta i contenuti ci appariranno nella nostra lingua.

Language

Ora creiamo l’applicazione news con il seguente comando:

python manage.py startapp news

Installiamo l’app aggiungendola alla lista delle app preinstallate da Django andando nel file settings.py del progetto alla voce INSTALLED_APPS

Install app

Entriamo ora nel vivo del nostro post e apriamo il file models.py dell’applicazione news. Questo file importantissimo ci permette di mappare le classi create (entità) con la struttura del database che si modellerà in base a quanto definito in esso. Ora un’applicazione news ha almeno due classi per rendere il tutto più semplice, la classe Articolo e la classe Giornalista cioè colui che scrive gli articoli. Il codice che ora spiegherò è riportato sotto.

from django.db import models
# Create your models here.
class Giornalista(models.Model):
    nome = models.CharField(max_length=20)
    cognome = models.CharField(max_length=20)
    def __str__(self):
        return f'({self.nome} + {self.cognome})'
class Articolo(models.Model):
    titolo = models.CharField(max_length=100)
    contenuto = models.TextField()
    giornalista = models.ForeignKey(Giornalista,on_delete=models.CASCADE,related_name='articoli')
    def __str__(self):
        return self.titolo

SPIEGAZIONE DEL CODICE

Le classi Giornalista e Articolo diventeranno le tabelle del nostro database, mentre gli attributi come nome e cognome diventeranno le colonne. La tipologia dei campi del model dipende dalla lunghezza degli attributi, per nome e cognome un CharField (ricorda che per questo tipo di dato bisogna specificare la lunghezza con max_length) va benissimo, mentre per il contenuto di un Articolo, che può essere corposo, scegliamo la tipologia TextField (fare riferimento alla documentazione per tutti i vari tipi di campi supportati da Django). Spieghiamo ora la ForeignKey.

RELAZIONI

Esiste ovviamente una relazione tra Giornalista e Articolo. Django per costruire questa relazione ci mette a disposizione la ForeignKey (chiave esterna) definita nella classe Articolo nell’attributo giornalista che ci permette di sapere quell’articolo da chi è stato scritto. (Relazione molti-a-uno un Giornalista può scrivere molti articoli). on_delete specifica cosa deve fare Django quando viene eliminato un Giornalista. L’attributo CASCADE indica che insieme al Giornalista devono essere eliminati anche i suoi articoli. related_name ci permette di risalire alla relazione inversa cioè dal Giornalista andare a vedere tutti gli articoli che ha scritto. Tieni presente, infine, che Django implementa automaticamente la chiave primaria delle tabelle, ossia un identificatore univoco numerico(id) che si incrementa automaticamente.

LE MIGRAZIONI

Ora che abbiamo costruito il modello dobbiamo creare le tabelle nel database tramite il meccanismo delle migrazioni. Per far ciò impartiamo i seguenti comandi.

python manage.py makemigrations (crea i comandi sql da inviare al db)

python manage.py migrate (crea la struttura del database sqlite)

Possiamo vedere la migrazione con il comando

python manage.py sqlmigrate news 0001 

Ti consiglio di scaricare il programma DB Browser (sqlite) per vedere effettivamente il database creato.

LINK AI POST PRECEDENTI

PREVIOUS POST LINKS

LINK AL CODICE SU GITHUB

GITHUB