Relaciones en los modelos de Django

django-icon

Relaciones en los modelos de Django

Hola estimado lector, si nos seguís con frecuencia recordarás que en este blog dedicamos una sección a los modelos del Framework Django, si aún no has podido leerla, te dejo el enlace aquí:

Los modelos de Django

En esta ocasión nos vamos a detener en entender las relaciones entre tablas, tratadas desde dichos modelos de Django, para ello vamos a exponer un ejemplo que ilustre todo esto. Recuerda que si lo que deseas es aprender Django de verdad, tenemos un curso profesional de Django súper actualizado, lo puedes consultar aquí:

Curso profesional de Django 3

Para este ejemplo vamos a crear una aplicación de Django llamada empleados desde la consola o desde algún IDE como Pycharm, no nos detenemos en explicar como crear una aplicación ya que lo tenéis muy bien explicado en documentación oficial de Django aquí: https://docs.djangoproject.com/es/3.2/intro/tutorial01/

Una vez creada, vamos a crear dos aplicaciones internas llamadas departamento y empleado(no confundir este último con el nombre global de la aplicación)

Una vez montado el entorno de trabajo, expongo como son las relaciones entre las tablas departamento y empleado que vamos a crear:

Como puedes observar tenemos las tablas mencionadas anteriormente, donde vamos a crear una relación de uno a muchos entre la tabla Departamento y Empleado, es decir, un Departamento puede tener muchos empleados. ¿Cómo plasmamos esto en el código?

MODELO DEPARTAMENTO

class Departamento(models.Model):
    name = models.CharField('Nombre', max_length=50)
    short_name = models.CharField('Nombre corto', max_length=20, unique=True)
    anulate = models.BooleanField('Anulado', default=False)

    def __str__(self):
        return str(self.id) + ' - ' + self.name

MODELO EMPLEADO

class Empleado(models.Model):

    JOB_CHOICES = (
        ('0', 'CONTABLE'),
        ('1', 'GERENTE'),
        ('2', 'ADMINISTRATIVO'),
        ('3', 'RECURSOS HUMANOS'),
        ('4', 'OTROS'),
    )

    first_name = models.CharField('Nombre', max_length=60)
    last_name = models.CharField('Apellidos', max_length=120)
    job = models.CharField('Trabajo', max_length=1, choices=JOB_CHOICES)
    departamento = models.ForeignKey(Departamento, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.id) + ' - ' + self.first_name + ' ' + self.last_name

Cómo puedes observar para poder establecer la relación de uno a muchos indicada debemos especificar el campo de relación en la tabla Empleado, para ello hemos añadido un campo departamento de tipo ForeignKey. Este campo ForeignKey admite dos argumentos, el primero es la tabla con la que se va a relacionar y el segundo es el tipo de eliminación de registro, es decir cuando eliminemos un registro de la Empleado como se eliminaran los datos asociados en la tabla Departamento, en este caso le hemos indicado que sea en cascada.

Una vez creados los modelos, recuerda que debes agregarlos al admin.py de cada aplicación par que puedan ser tratados desde el panel de administrador de Django, por ejemplo:

admin.site.register(Departamento)

Ahora vamos a crear la migraciones para plasmar todo esto en la base de datos:

python manage.py makemigrations
python manage.py migrate

Y con esto ya lo tenemos, si accedes ahora al panel de administrador de Django, podrás ver los resultado.

Bueno y eso es todo por el momento. Si te ha gustado comparte por favor, nos ayudas mucho!

  • Share:

Deja un comentario

Your email address will not be published.

    Enviar un mensaje




    Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

    ACEPTAR
    Aviso de cookies
    Call Now Button