Lección 3.2. Creando los modelos de la base de datos en Django Framework.

Vie 12 Jun 2020 | Por: Roylan Suarez

Hola amigo lector de CódigoJS, Desarrollo Web Sevilla. Un nuevo artículo sobre este maravilloso framework de desarrollo web para perfeccionistas con límites de tiempo.

En la lección de hoy vamos a crear nuestros modelos en la base de datos donde guardaremos toda la información del proyecto Taréas. Sin más vamos directo a la acción.

Antes de continuar, recuerda que el código fuente de este proyecto está disponible en GitHub

Tabla de contenidos


Creando nuestra app tareas

Como vimos en la lección anterior, toda la lógica del backend estará en la carpeta ~/Proyectos/tareas/backend, nos vamos a la consola y nos ubicamos en este directorio:

$ cd ~/Proyectos/taras/backend

Ahora vamos a crear la app tareas en la cual va a residir todo el código relacionado con las tareas.

$ python manage.py startapp tareas

La carpeta recién creada es un módulo de Python con una estructura como la siguiente:

tareas
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

Registrando la aplicación en el proyecto

Antes de continuar es necesario registrar la app tareas recién creada en el settings.py para que se registre en el proyecto.

registrar app settings django

Como vemos en la imagen, editamos el archivo settings.py que se encuentra en la carpeta backend del proyecto. Añadimos la app tareas al final de las INSTALLED_APP.

Creando los modelos

Por ahora, solamente nos interesa el archivo models.py en la app tareas, en el cual vamos a crear los modelos de la base datos para guardar toda la información relacionada con las tareas. Para los más nuevos, un modelo se puede decir que represanta una tabla en la base de datos.

Ahora nos vamos a nuestro editor de código favorito y editamos el archivo models.py de la aplicación tareas y añadimos el siguiente código:

from django.db import models
from django.contrib.auth.models import User

class Tarea(models.Model):
    ALTA = '1'
    NORMAL = '2'
    BAJA = '3'
   
    PRIORIDAD_TAREA = (
        (ALTA, 'Alta'),
        (NORMAL, 'Normal'),
        (BAJA, 'Baja'),
    )

    nombre = models.CharField(max_length=100, help_text="Nombre de la tarea")
    descripcion = models.TextField(help_text="Descripción de la tarea")
    responsable = models.ForeignKey(User, on_delete=models.CASCADE)
    prioridad = models.CharField(
        max_length=20,
        choices=PRIORIDAD_TAREA,
        default='2',
        blank=True,
        help_text="Prioridad de la tarea"
    )
    fecha_creacion = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.nombre

class Comentario(models.Model):
    usuario = models.ForeignKey(User, on_delete=models.CASCADE)
    tarea = models.ForeignKey(Tarea, on_delete=models.CASCADE)
    comentario = models.TextField()
    fecha_creacion = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.tarea.nombre

Como se puede ver, hemos creado dos modelos, uno llamado Tarea que tendrá los campos:

  • nombre: Para establecer un nombre a la tarea
  • descripcion: Para describir la tarea
  • responsable: Este campo tiene una relación con el modelo User de Django y nos permitirá establecer las tareas a determinados usuarios
  • prioridad: Es un campo de tipo Choice donde se establece la prioridad de la terea
  • fecha_creacion: Guarda de forma automática la fecha y hora de creación de la tarea

El segundo modelo se llama Comentario, tendrá la función de guardar comentarios relacionados con cada tarea y tiene los siguientes campos:

  • usuario: Tiene relación con el modelo Users de Django y nos permitirá saber a qué usuario pertenece el comentario
  • tarea: Tiene relación con el modelo Tarea y perite saber a qué tarea pertence el comentario
  • comentario: Permite guardar los comentarios que los usuarios realicen sobre una determinada tarea
  • fecha_creacion: Guarda la fecha y hora en la que se creó el comentario

Una vez tenemos todos los modelos creados, vamos a ejecutar las migraciones para que se creen las tablas en la base de datos. El siguiente comando crea la estructura de las migraciones antes de escribirlas en la base de datos y de esa forma asegurarnos que todo está bien.laugh

$ python manage.py makemigrations

El resultado debería ser como sigue:

Migrations for 'tareas':
  tareas/migrations/0001_initial.py
    - Create model Tarea
    - Create model Comentario

Por último, si todo está bien aplicamos las migraciones para que finalmente se creen en la base de datos:

$ python manage.py migrate

El resultado debería ser como sigue:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, tareas
Running migrations:
  Applying tareas.0001_initial... OK

De esta forma se crearán los dos modelos en la base de datos.

Activando modelos en el Admin de Django

Bien es sabido por la comunidad que una de las cosas que nos hace la vida fácil a los que trabajamos con Django es la interfaz de administración que el Framework crea de forma automática para administrar la base de datos.

De forma predeterminada cuando se crea un nuevo proyecto con Django, la interfaz de administración viene activa, asi que no tenemos que hacer nada más. Para activar los dos modelos recién creados editarmos el archivo admin.py de la aplicación tareas y añadimos el siguiente código:

from django.contrib import admin

from . import models 

@admin.register(models.Tarea)
class TareaAdmin(admin.ModelAdmin):
    list_display = ('nombre', 'fecha_creacion',)
    search_fields = ('nombre',)

@admin.register(models.Comentario)
class ComentarioAdmin(admin.ModelAdmin):
    list_display = ('tarea', 'fecha_creacion',)
    search_fields = ('tarea',)

Lo más importante: En la segunda línea importamos el models.py de la aplicación tareas y seguido registramos dos clases que representan a cada modelo de la base de datos. Las opción list_display es una tupla que contiene los campos que se van a mostrar en la administración y search_fields los campos sobre los cuales se podrán hacer búsquedas.

Casi estamos listos para acceder al panel de administración de Django, corremos el servidor de desarrollo:

$ python manage.py runserver

Abrimos el navegador y escribimos http://localhost:8000/admin/ y nos debe aparecer un formulario de inicio de sesión para acceder al panel de administración.

Como nunca hemos accedido a la administración debemos crear un superuser que nos permita acceder, para ello, nos vamos a la consola e interrumpimos el servidor de desarrollo con Ctrol + C y escribimos:

$ python manage.py createsuperuser

Nos saldrá un prompt preguntando el nombre de usuario, email y contraseña.

Después de crear el superuser de Django corremos nuevamente el servidor de desarrollo:

$ python manage.py runserver

Abrimos el navegador y accedemos a http://localhost:8000/admin/, escribimos el usuario y contraseña creados previamente y si todo ha salido bien deberíamos estár viendo el panel de administración.

Panel Admin Django

Como podemos ver en la administración tenemos la aplicación Tareas con los dos modelos de Tareas y Comentarios. Ahora podemos jugar un poquito con la administración y crear algunas tareas de ejemplo para las próximas lecciones.

Conclusiones

Hasta aquí la lección de hoy, un poco extensa pero necesaria, tampoco hemos profundizado demasiado en los conceptos de los modelos de Django porque no es el objetivo del curso, de lo contrario sería muy extenso.

¿Tienes alguna duda frown? Déjanos saber en los comentarios y con mucho gusto te responderemos...

Nos vemos en la próxima...

 



Déjanos un comentario

Artículos relacionados