Ejercicio: Trabajar con datos
Al crear los modelos, creamos una API que se puede usar para acceder a los datos de la base de datos. Esta API nos permite crear, recuperar, actualizar y eliminar objetos de la base de datos.
Vamos a explorar la API trabajando con los modelos que hemos creado.
Configuración del shell interactivo
Django incluye un shell interactivo en el que puede ejecutar código de Python en el entorno de Django.
Vuelva al terminal en Visual Studio Code; para ello, seleccione Ver>Terminal.
Ejecute el comando siguiente para iniciar el shell:
python manage.py shell
Importe los modelos desde
models
dentro dedog_shelters
:from dog_shelters.models import Shelter, Dog
Creación y modificación de objetos
Dado que los modelos son clases de Python, las nuevas instancias se crean con la misma sintaxis que usaríamos para crear un objeto. Dado que heredan de Django.models.Model
, heredan la funcionalidad del ORM de Django. Esa funcionalidad incluye save
, que se usa para guardar el objeto en la base de datos.
Cree un nuevo refugio ejecutando el comando de Python siguiente en el shell:
shelter = Shelter(name="Demo shelter", location="Seattle, WA") shelter.save()
La parte
save
escribirá el objeto en la base de datos. Como lo hemos creado desde cero, ejecutará una instrucciónINSERT
en la base de datos.Actualice la ubicación del refugio a Redmond, WA; para ello, establezca el campo
location
llamando asave
:shelter.location = "Redmond, WA" shelter.save()
Este comando emitirá una instrucción
UPDATE
para actualizar el valor en la base de datos.Cree dos nuevos perros para el refugio ejecutando los comandos de Python siguientes en el Shell:
Dog(name="Sammy", description="Cute black and white dog", shelter=shelter).save() Dog(name="Roscoe", description="Lab mix", shelter=shelter).save()
Como antes,
save
inserta el perro. Observe cómo se establece el parámetroshelter
en el objetoshelter
que hemos creado antes. Django establecerá automáticamente la relación en la base de datos.Tenga en cuenta también que no hemos configurado una variable local para cada instancia
Dog
. Dado que no se reutilizarán los objetos, no es necesario establecerlos en una variable.
Recuperación de objetos
Para recuperar objetos de una base de datos, Django proporciona una propiedad objects
en todas las clases Model
. La propiedad objects
proporciona varias funciones, como all
, filter
y get
.
Recupere todos los perros del Refugio de demostración ejecutando el comando siguiente:
shelter.dog_set.all()
La parte
dog_set
almacena la lista de todos los perros para un refugio determinado. Django devolverá un objetoQuerySet
con los dos perros que hemos creado.<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
Recupere el segundo perro usando
get
tal como se muestra en el comando siguiente:Dog.objects.get(pk=1)
La función
get
devolverá solo un objeto. Puede pasar parámetros aget
para proporcionar una cadena de consulta. Aquí usamospk
, que es una palabra clave especial para indicar la clave principal. El resultado devuelto será Sammy.<Dog: Sammy>
Recupere todos los perros del refugio de demostración mediante
filter
tal como se muestra en el comando siguiente:Dog.objects.filter(shelter__name='Demo shelter')
Al igual que
get
,filter
nos permite pasar una consulta en los parámetros. Observe que podemos usar dos caracteres de subrayado (__
) para ir de propiedad en propiedad. Dado que queremos encontrar todos los perros del refugio denominado refugio de demostración, usamosshelter__name
para acceder a la propiedadname
deshelter
. El resultado devuelto será todos los perros, porque solo tenemos un refugio.<QuerySet [<Dog: Sammy>, <Dog: Roscoe>]>
Cierre del shell
Cuando haya terminado de experimentar con los objetos, puede cerrar el shell mediante el comando exit()
.
Resumen
Ahora ha visto cómo puede trabajar con datos mediante programación en Django mediante el ORM de Django.