Esercizio - Usare i dati
Con la creazione dei modelli è stata creata un'API che è possibile usare per accedere ai dati nel database. Questa API consente di creare, recuperare, aggiornare ed eliminare oggetti presenti nel database.
È ora possibile esaminare l'API usando i modelli che sono stati creati.
Configurare la shell interattiva
Django include una shell interattiva in cui è possibile eseguire il codice Python nell'ambiente Django.
Tornare al terminale in Visual Studio Code selezionando Visualizza>Terminale.
Per avviare la shell, immettere il comando seguente:
python manage.py shell
Importare i modelli da
models
all'interno didog_shelters
:from dog_shelters.models import Shelter, Dog
Creare e modificare oggetti
Poiché i modelli sono classi Python, vengono create nuove istanze usando la stessa sintassi usata per creare un oggetto. Poiché ereditano da Django.models.Model
, ereditano le funzionalità per l'ORM di Django. Tali funzionalità includono save
, che viene utilizzato per salvare l'oggetto nel database.
Creare un nuovo canile eseguendo il comando Python seguente nella shell:
shelter = Shelter(name="Demo shelter", location="Seattle, WA") shelter.save()
La parte
save
scrive l'oggetto nel database. Poiché tale oggetto è stato creato da zero, eseguirà un'istruzioneINSERT
nel database.Aggiornare la posizione del canile a Redmond, WA, impostando il campo
location
e chiamandosave
:shelter.location = "Redmond, WA" shelter.save()
Questo comando genera un'istruzione
UPDATE
per aggiornare il valore nel database.Creare due nuovi cani per il canile eseguendo i comandi Python seguenti nella shell:
Dog(name="Sammy", description="Cute black and white dog", shelter=shelter).save() Dog(name="Roscoe", description="Lab mix", shelter=shelter).save()
Come in precedenza,
save
inserisce il cane. Si noti che il parametroshelter
viene impostato sull'oggettoshelter
creato in precedenza. Django imposta automaticamente la relazione nel database.Si noti anche che non è stata configurata una variabile locale per ogni istanza di
Dog
. Poiché gli oggetti non vengono riutilizzati, non è necessario impostarli su una variabile.
Recupero di oggetti
Per recuperare oggetti da un database, Django fornisce una proprietà objects
per tutte le classi Model
. La proprietà objects
fornisce più funzioni, tra cui all
, filter
e get
.
Recuperare tutti i cani in Demo shelter eseguendo il comando seguente:
shelter.dog_set.all()
La parte
dog_set
memorizza l'elenco di tutti i cani di uno specifico canile. Django restituirà un oggettoQuerySet
con i due cani che sono stati creati.<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
Recuperare il secondo cane usando
get
come illustrato nel comando seguente:Dog.objects.get(pk=1)
La funzione
get
restituirà un solo oggetto. Per fornire una stringa di query, è possibile passare i parametri inget
. In questo caso viene usatopk
, una parola chiave speciale che indica la chiave primaria. Il risultato restituito sarà Sammy.<Dog: Sammy>
Recuperare tutti i cani in Demo shelter usando
filter
come illustrato nel comando seguente:Dog.objects.filter(shelter__name='Demo shelter')
Come
get
, anchefilter
consente di passare una query nei parametri. Si noti che, per passare da una proprietà all'altra, è possibile usare due caratteri di sottolineatura (__
). Poiché si vogliono trovare tutti i cani presenti nel canile denominato Demo shelter, viene usatoshelter__name
per accedere alla proprietàname
dishelter
. Come risultato verranno restituiti tutti i cani, perché è presente un solo canile.<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
Chiudere la shell
Dopo aver completato la gestione degli oggetti, è possibile chiudere la shell eseguendo il comando exit()
.
Riepilogo
In questo modulo è stato illustrato come usare i dati a livello di codice in Django tramite l'ORM di Django.