La Biblioteca, aplicación en Django 1.8 | Parte II
- La Biblioteca, aplicación en Django 1.8 | Parte I
- La Biblioteca, aplicación en Django 1.8 | Parte II
- La Biblioteca, aplicación en Django 1.8 | Parte III
- La Biblioteca, aplicación en Django 1.8 | Parte IV
- La Biblioteca, aplicación en Django 1.8 | Parte V
- La Biblioteca, aplicación en Django 1.8 | Parte VI
- La Biblioteca, aplicación en Django 1.8 | Parte VII
En la entrada de hoy continuamos con la segunda parte de nuestra aplicación Django, hasta este momento tenemos nuestro proyecto (llamado sitiolectura
) y nuestra aplicación (llamada biblioteca
) creada y registrada correctamente, hoy vamos a enfocarnos en los modelos de la app y Django nos ofrece facilidades enormes para tal propósito. Supongo que ya sabes qué son los modelos en un aplicativo de software, mas sin embargo, por respeto, diré acogiéndome a la definición textual que:
El Modelo es la representación de la información con la cual el sistema opera.
Los modelos pues, son las definiciones de nuestra base de datos (hablando a groso modo). En nuestra aplicación supondremos que un Libro puede tener mas de un Autor, y un Autor puede escribir mas de un Libro (relación ManyToMany entre Libro y Autor), además supondremos que un Editor puede distribuir muchos Libros, pero un Libro solo puede ser distribuido por un solo Editor (relación OneToMany entre Libro y Editor, también conocida como ForeignKey). Nuestras tablas (entidades) en la base de datos serán entonces Libro, Editor y Autor con las relaciones anteriormente descritas. Dicho esto, comencemos.
Crear nuestra base de datos inicial:
Como ya dije en el post anterior, Django nos instala por defecto algunas apps convenientes y que nos ayudan en un montón de cosas (usuarios, permisos, grupos, admin, etc.), dichas apps por defecto tienen también sus modelos. Para crear tu base de datos abre la terminal y ve al directorio donde se encuentre el archivo manage.py
, en mi caso es: C:/users/Carlos/Desktop/virtual-biblioteca/sitiolectura
y coloca lo siguiente: python manage.py migrate
.
Este comando te creará una base de datos con los modelos definidos en las apps por defecto, por lo que si eres curioso verás en esta primera BBDD habrán tablas llamadas auth_user
, auth_group
, django_session
, etc. Cabe agregar que la base de datos estará ubicada en virtual-biblioteca/sitiolectura
con el nombre de db.sqlite3
Cosas por decir acá:
-
El sistema gestor de base de datos que usa Django por default es SQLite, por lo que tu BBDD estará construida en SQLite.
-
Quizás quieras descargar un complemento de Mozilla para administrar bases de datos SQLite, te facilitará mucho la vida.
-
Además de SQLite, Django también soporta Sistemas gestores como MySQL o PostgreSQL, si quieres trabajar con alguno de ellos, puedes leer la documentacion al respecto.
-
Si quieres cambiar el nombre de tu BBDD es recomendable que te dirijas a
settings.py
y cambies tal configuración, así:
Crear nuestro modelo de datos
Ahora que ya hemos creado nuestra base de datos inicial, crearemos nuestro propio modelo de datos para nuestra biblioteca. Ve a la carpeta biblioteca
y abre el archivo models.py
, este archivo será donde irán las definiciones de nuestro modelos para esta app, dentro de este archivo coloca lo siguiente:
Este archivo le da a Django mucha información con respecto a nuestra BBDD. Cada clase especificada en models.py
se traducirá como una tabla en la base de datos, y cada atributo de clase, será traducido como una columna de tabla. Además cada instancia de clase será traducida por Django como un registro de la base de datos.
Cosas por decir acá:
-
Django automáticamente le da a cada tabla en nuestra base de datos una llave primaria, que se llamará
id
. -
Las tablas creadas seguirán el formato
<name_app>_<name_clase>
, por lo que paraLibro
, su correspondiente tabla en la BBDD serábiblioteca_libro
. -
Cada atributo de clase es una instancia de la clase models, te dejo la lista de los tipos de atributos disponibles (hay enteros, de tipo binarios, de tipo fecha)
-
El método
__unicode__
nos ayudará a identificar al objeto con el cual estamos interactuando, si no lo entiendes ahora, no te preocupes, luego verás la utilidad de este método mágico. -
el atributo
editor
en la claseLibro
hace referencia a la claseEditor
pues es una llave foránea. -
para los atributos ManyToMany, como es el caso de
autores
en la claseLibros
, Django automáticamente construye una tabla intermedia para acceder a los atributos de uno y otro, en nuestro caso dicha tabla esbiblioteca_libros_autores
Ya escribimos el modelo de datos, pero no le hemos dicho a Django que haga lo suyo, las tablas y todo lo demás aún no han sido creadas, vamos a cambiar eso.
Activar el modelo de datos en la base de datos
Abrimos una terminal y nos dirigimos al directorio donde está ubicado manage.py
, luego escribimos:
-
python manage.py makemigrations
, tendrá que salirte algo como estoHasta este paso hemos hecho las migraciones de nuestros modelos, pero aun no se han aplicado los cambios a nuestra BBDD (para los que han trabajado con
GIT
, puedes pensar en esto como si hubiésemos hecho un “commit”, pero no el “push”), puedes ver que en la carpetamigrations
hay un archivo, nuestra primera migración. Nuestra información está lista para ser insertada en nuestra BBDD en forma de SQL. -
si quieres ver el SQL generado a partir de nuestros modelos digíta:
python manage.py sqlmigrate biblioteca 0001
. Este comando es útil para saber las acciones que vamos a introducir en forma de SQL en nuestra BBDD antes de hacerlo. -
Ahora vamos a hacer efectivos los cambios. Pon
python manage.py migrate
, con esto habremos modificado la BBDD.
RECORDEMOS: los 3 pasos para hacer cambios en la base de datos son:
-
Cambiar algo en nuestros modelos (en
models.py
). -
Correr
python manage.py makemigrations
para crear las migraciones correspondientes a esos cambios -
Correr
python manage.py migrate
para aplicar esos cambios a la base de datos.
Y eso es todo, si tienen alguna duda o problema al respecto, pueden hacérmelo saber mas abajo en la caja de comentarios. Gracias por leer y comentar.