Python | Campos relacionales en modelos Django

Requisito previo:
modelos Django

 
Los modelos de Django representan entidades del mundo real, y rara vez ocurre que las entidades del mundo real sean completamente independientes entre sí. De ahí que Django soporte bases de datos relacionales y nos permita establecer relaciones entre diferentes modelos. Hay tres tipos de campos relacionales compatibles con Django: muchos a uno, muchos a muchos y uno a uno.

Campos de muchos a uno:

Esto se usa cuando un registro de un modelo A está relacionado con varios registros de otro modelo B. Por ejemplo, una canción modelo tiene una relación de muchos a uno con un álbum modelo , es decir, un álbum puede tener muchas canciones, pero una canción no puede tenerlas. ser parte de múltiples álbumes. Las relaciones de muchos a uno se definen usando ForeignKeyel campo de django.db.models.

A continuación se muestra un ejemplo para demostrar lo mismo.

from django.db import models
  
class Album(models.Model):
    title = models.CharField(max_length = 100)
    artist = models.CharField(max_length = 100)
  
class Song(models.Model):
    title = models.CharField(max_length = 100)
    album = models.ForeignKey(Album, on_delete = models.CASCADE)

Es una buena práctica nombrar el campo de muchos a uno con el mismo nombre que el modelo relacionado, en minúsculas.

Muchos a muchos campos:

Esto se usa cuando un registro de un modelo A está relacionado con múltiples registros de otro modelo B y viceversa. Por ejemplo, un libro modelo tiene una relación de muchos a muchos con un autor modelo , es decir, varios autores pueden escribir un libro y un autor puede escribir varios libros. Las relaciones de muchos a muchos se definen usando ManyToManyFieldel campo de django.db.models.

A continuación se muestra un ejemplo para demostrar lo mismo.

from django.db import models
  
class Author(models.Model):
    name = models.CharField(max_length = 100)
    desc = models.TextField(max_length = 300)
  
class Book(models.Model):
    title = models.CharField(max_length = 100)
    desc = models.TextField(max_length = 300)
    authors = models.ManyToManyField(Author)

Es una buena práctica nombrar el campo de muchos a muchos con la versión plural del modelo relacionado, en minúsculas. No importa cuál de los dos modelos contenga el campo de muchos a muchos, pero no debe colocarse en ambos modelos.

Campos uno a uno:

Esto se usa cuando un registro de un modelo A está relacionado exactamente con un registro de otro modelo B. Este campo puede ser útil como clave principal de un objeto si ese objeto se extiende a otro objeto de alguna manera. Por ejemplo, un modelo de automóvil tiene una relación de uno a uno con un modelo de vehículo , es decir, un automóvil es un vehículo. Las relaciones uno a uno se definen usando OneToOneFieldel campo de django.db.models.

A continuación se muestra un ejemplo para demostrar lo mismo.

from django.db import models
  
class Vehicle(models.Model):
    reg_no = models.IntegerField()
    owner = models.CharField(max_length = 100)
  
class Car(models.Model):
    vehicle = models.OneToOneField(Vehicle, 
          on_delete = models.CASCADE, primary_key = True)
    car_model = models.CharField(max_length = 100)

Es una buena práctica nombrar el campo uno a uno con el mismo nombre que el del modelo relacionado, en minúsculas.

Opciones de integridad de datos:

Dado que estamos creando modelos que dependen de otros modelos, necesitamos definir el comportamiento de un registro en un modelo cuando se elimina el registro correspondiente en el otro. Esto se logra agregando un on_deleteparámetro opcional en el campo relacional, que puede tomar los siguientes valores:

  • on_delete = models.CASCADE– Este es el valor predeterminado. Elimina automáticamente todos los registros relacionados cuando se elimina un registro (por ejemplo, cuando se elimina un registro de álbum, se eliminarán todos los registros de canciones relacionados con él)
  • on_delete = models.PROTECT– Bloquea la eliminación de un registro que tenga relación con otros registros (por ejemplo, se bloqueará cualquier intento de eliminar un registro de Álbum)
  • on_delete = models.SET_NULL– Asigna NULL al campo relacional cuando se elimina un registro, siempre que null = Trueesté configurado.
  • on_delete = models.SET_DEFAULT– Asigna valores por defecto al campo relacional cuando se elimina un registro, se debe proporcionar un valor por defecto.
  • on_delete = models.SET()– Puede tomar un valor por defecto como parámetro, o un invocable, cuyo valor de retorno será asignado al campo.
  • on_delete = models.DO_NOTHING– No realiza ninguna acción. Es una mala práctica usar este valor.

Publicación traducida automáticamente

Artículo escrito por Abhishek De y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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