Tema 2: creación de Modelos en Django

24/06/2022 · Actualizado: 28/07/2022

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Aquí tienes la página del curso de Django, donde encontrarás el resto de temas disponibles.

En el primer tema de este curso te mencioné brevemente como crear e interactuar con las bases de datos que formamos en Django.

En este segundo tema voy a profundizar mucho en la parte de la creación de modelos y en el Tema 3 te hablaré de como interactuar con ellos desde el exterior.

Índice
  1. Qué es un Modelo en Django
  2. Cómo crear un modelo en Django
  3. Elegir motor de la base de datos
    1. Configurar uso de la base de datos en settings.py
  4. Implementación de la clase Models.py
    1. Especificación de las tablas necesarias en el Modelo
    2. Creación de la Base de Datos usando el modelo
    3. Migrar la BBDD para actualizar la información
  5. Ejercicios para practicar

Qué es un Modelo en Django

Un modelo en Django es la forma que tenemos de almacenar nuestras bases de datos. Para ello, lo primero que tenemos que hacer es definir el modelo y sus atributos. Si no estás muy familiarizado/a con las bases de datos, aquí tienes el tutorial que hice sobre BBDD que te servirá para conocer los conceptos básicos.

Cómo crear un modelo en Django

Cada atributo que queramos incluir en nuestra base de datos, ha de se especificada en el modelo, así como su tipo. Estos datos se almacenarán internamente en el tipo de base de datos que hayamos especificado en el fichero de configuración (settings.py).

Django cuenta con diferentes opciones de bases de datos que podemos integrar en nuestros proyectos. Tenemos la ventaja de que nosotros no tenemos que interactuar directamente con la base de datos per se, y todas las operaciones internas serán realizadas por Django.

Elegir motor de la base de datos

Entre las BBDD disponibles se encuentran PostGreSQL, MariaDB, MySQL, Oracle y SQLite. Son las opciones más conocidas y utilizadas. No voy a entrar en detalle a explicarte cada una de ellas, pero puedes encontrar información concreta en la documentación oficial de Django o en sus respectivas páginas web.

En particular, sobre todo para empezar con proyectos que no sean gigantescos, SQLite es la mejor opción por su simplicidad. SQLite almacena los datos de la base de datos en un fichero dentro del directorio de nuestro proyecto. Como te digo, es la opción más simple pero es bastante potente y yo misma he desarrollado proyectos grandes utilizando esta opción.

Configurar uso de la base de datos en settings.py

En concreto, lo que tendremos que poner en el fichero de configuración en el caso de elegir SQLite, es que utilizamos este motor y el nombre (que incluya la ruta) del fichero en el cual se van a almacenar los datos finales. Esta información se especifica en la variable DATABASES del fichero setting.py:

bases de datos en django con sqlite3

Implementación de la clase Models.py

Una vez hemos configurado la BBDD que vamos a utilizar, ya podemos especificar nuestro/s modelo/s. Para ello, lo primero que debes hacer es crear una nueva aplicación dentro del proyecto en el caso de ser necesario. El ejemplo que voy a poner para explicarte como funcionan los modelos, vamos a manejar una supuesta base de datos de canciones, por tanto, vamos a llamarlo songsapp:

python manage.py startapp songsapp

Lo primero que debemos hacer al crear una nueva aplicación dentro de nuestro proyecto es añadirlo en la variable INSTALLED_APPS dentro del fichero settings.py, de esta manera:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'songsapp', # entre comillas, con el nombre igual que el que usamos al crearlo y con una coma después
]

Dentro de la carpeta que se acaba de crear llamada songsapp abriremos (y en caso de que no exista, lo crearemos) el fichero models.py. En este fichero es donde se especificarán TODOS los modelos de la aplicación songsapp.

⚠️ IMPORTANTE ⚠️
En un proyecto de Django hay que separar bloques de funcionalidades. Cada bloque se construye como una aplicación, es importante no mezclarlas.

Para crear un modelo, lo primero que hay que hacer es importar las clases correspondientes, que en este caso sería la siguiente:

from django.db import models

De esta manera, podremos crear nuestro primer modelo, así como especificar los atributos del mismo. Cada modelo que especifiquemos en Django se crea mediante una clase que herede de models.Model, y los atributos del modelo se especifican como atributos de la clase.

Especificación de las tablas necesarias en el Modelo

Para nuestro ejemplo, queremos crear un modelo que represente la información de una base de datos de canciones. Por ello debemos tener en cuenta los campos a almacenar y asignarles los tipos de datos de Django de datos que correspondan.

Podríamos crear un modelo que almacene: título de la canción, fecha de lanzamiento, cantante, álbum al que pertenece, género y duración.

Para ello, vamos a crear una tabla en nuestro fichero models.py, tal que así:

class Canciones(models.Model):
    titulo = models.CharField(max_length=500)
    fechaLanzamiento = models.DateField()
    cantante = models.CharField(max_length=500)
    album = models.CharField(max_length=500)
    genero = models.CharField(max_length=500)
    duracion = models.TimeField()

Por supuesto, esta información podría mostrarse en diferentes modelos con tablas relacionadas entre sí. Pero para empezar voy a implementarlo así y más adelante en este curso ya veremos estructuras de datos más complejas.

Tipos de campos para los modelos en Django

En los modelos de Django tenemos diferentes maneras de almacenar la información según el tipo de dato que queramos almacenar. En este ejemplo, vamos a ver los más comunes, pero si quieres conocerlos todos, te recomiendo que le eches un ojo a esta página de la documentación oficial de Django.

En concreto en este ejemplo utilizamos los siguientes tipos de campos para modelos:

  • CharField ➢ tipo de campo para almacenar frases cortas y no estructuradas por saltos de línea. Es imprescindible especificar el número máximo de caracteres tendrá el campo.
  • DateField ➢ tipo de campo que almacena fechas, puede ponerse alguna fecha por defecto. Por ejemplo si montásemos un blog o una red social donde poder comentar, este campo se pondría como: models.DateField(default=datetime.date.today).
  • TimeField ➢ este es un tipo de campo que nos permite almacenar variables de tiempo. Por ejemplo, para una canción que dure 2 minutos, y 25 segundos, implementaríamos las siguientes líneas de código, que será lo que le pasemos al constructor del model en el campo del TimeField, que en este caso es duracion:
import datetime
d = datetime.time(0, 2, 25) # parámetros: horas, minutos, segundos

Existen más campos en Django, te animo a que hagas algunas pruebas con la información que tenemos en la documentación.

Creación de la Base de Datos usando el modelo

Una vez tengamos nuestro modelo creado, podemos añadirle datos usando la función create del modelo.

Para ello, extraemos la información que queramos almacenar de la manera que corresponda (ya sea haciendo una petición a una API, leyendo los datos de un fichero, o como sea) y usando el modelo creado anteriormente haremos:

Canciones.objects.create(titulo = TituloDeLaCancion,
                         fechaLanzamiento = fechaDeLanzamiento,
                         cantante = nombreCantante,
                         album = nombreAlbum,
                         genero = genero,
                         duracion = duracion,
                         )

Siendo los elementos que te marco en cursiva aquellos que incluyen los valores que queremos asignar a cada atributo de nuestra base de datos.

Migrar la BBDD para actualizar la información

Cada cambio que hagamos en la base de datos debe actualizarse. Para ello, hay que realizar las migraciones correspondientes. Si ya has trabajado con BBDD sabrás de lo que te estoy hablando. Para hacer las migraciones aplicamos:

python manage.py makemigrations
python manage.py migrate

Con estos dos comandos ya deberíamos tener las BBDD actualizadas. Si ya tenemos alguna fila de la BBDD creada y en el cambio añadimos un nuevo atributo que no puede ser nulo, al aplicar makemigrations, nos preguntará como queremos manejar estos casos.

Ejercicios para practicar

Si te animas, prueba a hacer los siguientes ejemplos para practicar. Puedes ponerme la solución en comentarios!

  1. Modelar la BBDD para almacenar la información de los diferentes modelos de coches
  2. Modelar la BBDD que almacene la información de tus libros favoritos, añadiendo un campo para ponerle puntuación personal.
  3. Modelar una BBDD que permita guardar la información de un ticket de compra de un supermercado o tienda

En el siguiente tema de Django seguiremos trabajando con nuestro modelo, concretamente te enseñaré como mostrar en nuestra aplicación web los datos almacenados en los modelos. Así que nos vemos en el siguiente tema!

Aquí tienes la página del curso de Django, donde encontrarás el resto de temas disponibles hasta la fecha.

Pionera del caos

Ingeniera Informática con Máster en Bioinformática, casi doctora y freelancer. Todo lo que te cuento en este blog son aprendizajes que yo misma he tenido ya sea durante mis estudios o en otros proyectos!

Otras Entradas Relacionadas

  1. Spielberg dice:

    Este tuto me ha emocionado.

    (ahora en serio, muy bueno, gracias)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *



Para continuar es necesario que confirmes la política de privacidad de la web.

Subir