[ DJANGO ] Creación de modelos y tipos de campos

[ DJANGO ] Creación de modelos y tipos de campos

En esta ocasión, te explicaré como funcionan los campos de los modelos Django y sus opciones, así como un ejemplo práctico donde utilizaremos muchos de estos tipos de campos y opciones.


Tipos de campos en los modelos Django

Los campos son los atributos que tendrán los objetos que se almacenarán en la base de datos. Django ofrece varios tipos de campos que puedes utilizar en tus modelos.

Ya vimos anteriormente en el curso, como funcionaban las tablas de MySQL, esto es más o menos lo mismo, pero con atributos propios de Django. Veamos algunos tipos:

  • CharField: Este campo se utiliza para almacenar cadenas de texto de longitud variable.
  • IntegerField: Este campo se utiliza para almacenar números enteros.
  • FloatField: Este campo se utiliza para almacenar números decimales.
  • BooleanField: Este campo se utiliza para almacenar valores booleanos (True o False).
  • DateTimeField: Este campo se utiliza para almacenar fechas y horas.
  • DateField: Este campo se utiliza para almacenar fechas.
  • TimeField: Este campo se utiliza para almacenar horas.

Las opciones de los campos de Django

Además de los tipos de campos, también puedes utilizar opciones entre los paréntesis de los campos para personalizar su comportamiento. Algunas opciones comunes son:

  • null: Si se establece en True, el campo permitirá valores nulos en la base de datos.
  • blank: Si se establece en True, el campo permitirá valores en blanco (es decir, cadenas vacías) en los formularios.
  • default: Este parámetro permite establecer un valor predeterminado para el campo.
  • choices: Este parámetro permite establecer una lista de opciones disponibles para el campo.

Definiendo un modelo para usuarios con Django

Copia este código y reemplaza con él todo lo que tengas en el archivo "models.py" de tu app con Django (la que estamos utilizando de prueba en el curso).

from django.db import models

class Usuario(models.Model):
    # Campos de texto
    nombre_usuario = models.CharField(max_length=30, unique=True)
    nombre = models.CharField(max_length=50)
    apellidos = models.CharField(max_length=50)
    email = models.EmailField(unique=True)

    # Campos numéricos
    edad = models.PositiveIntegerField()
    peso = models.DecimalField(max_digits=5, decimal_places=2)
    altura = models.FloatField()

    # Campos de fechas
    fecha_nacimiento = models.DateField()
    ultimo_login = models.DateTimeField(auto_now=True)

    # Campos booleanos
    esta_activa = models.BooleanField(default=True)
    es_personal = models.BooleanField(default=False)

    # Campos con opciones
    OPCIONES_ROL = [
        ('usuario', 'Usuario normal'),
        ('admin', 'Administrador'),
    ]
    roles = models.CharField(max_length=7, choices=OPCIONES_ROL, default='usuario')

Voy a explicar cada uno de los tipos de campos y opciones, así como el cometido que tienen.

Modelos Django - Campos de texto

En los campos de texto tenemos el siguiente código:


# Campos de texto
nombre_usuario = models.CharField(max_length=30, unique=True)
nombre = models.CharField(max_length=50)
apellidos = models.CharField(max_length=50)
email = models.EmailField(unique=True)

models.CharField es un tipo de campo utilizado para almacenar cadenas de caracteres de longitud variable. Cada campo de CharField en el modelo necesita especificar el argumento max_length, que indica la longitud máxima de la cadena que puede almacenar el campo.

  • nombre_usuario es un campo de CharField con una longitud máxima de 30 caracteres y se define como único mediante la opción "unique=True". Esto significa que cada nombre de usuario debe ser único en la base de datos.
  • nombre es un campo de CharField con una longitud máxima de 50 caracteres. Este campo almacena el nombre del usuario.
  • apellidos es un campo de CharField con una longitud máxima de 50 caracteres. Este campo almacena los apellidos del usuario.
  • email es un campo de EmailField, que es un tipo especial de CharField que se utiliza para almacenar direcciones de correo electrónico. Al igual que nombre_usuario, también se define como único mediante la opción unique=True. Esto significa que cada dirección de correo electrónico debe ser única en la base de datos.

Modelos Django - Campos numéricos

En los campos numéricos tenemos el siguiente código:

# Campos numéricos
edad = models.PositiveIntegerField()
peso = models.DecimalField(max_digits=5, decimal_places=2)
altura = models.FloatField()

models.PositiveIntegerField es un tipo de campo empleado para almacenar números enteros positivos. Este campo no tiene argumentos adicionales, ya que no tiene una longitud máxima definida, por lo que puede almacenar números enteros positivos de cualquier tamaño (dentro de unos límites).


models.DecimalField es un tipo de campo usado para almacenar números decimales con una precisión fija. Este campo tiene dos argumentos requeridos: max_digits, que indica la cantidad máxima de dígitos que el campo puede almacenar, y decimal_places, que indica la cantidad de dígitos después del punto decimal que se pueden almacenar.

  • edad es un campo de PositiveIntegerField que almacena la edad del usuario.
  • peso es un campo de DecimalField con max_digits=5 y decimal_places=2. Esto significa que el campo puede almacenar hasta 5 dígitos en total, con 2 dígitos después del punto decimal. Por ejemplo, el campo podría almacenar un valor como 102.50 o 75.4.
  • altura es un campo de FloatField que almacena la altura del usuario.

Modelos Django - Campos de fecha

En los campos de fechas tenemos el siguiente código:

# Campos de fechas
fecha_nacimiento = models.DateField()
ultimo_login = models.DateTimeField(auto_now=True)

models.DateField es un campo que almacena una fecha. Este campo no tiene argumentos requeridos, pero puede tener argumentos opcionales como auto_now_add, auto_now y default para definir valores predeterminados o automáticamente actualizados.

Por otro lado, models.DateTimeField es un campo que almacena una fecha y una hora. Este campo también puede tener los mismos argumentos opcionales que DateField.

En el caso del campo fecha_nacimiento, se utiliza models.DateField para almacenar la fecha de nacimiento del usuario. Este campo no tiene argumentos adicionales, por lo que se almacenará una fecha en formato AAAA-MM-DD.

Por otro lado, ultimo_login utiliza models.DateTimeField con auto_now=True. Esto significa que el campo se actualizará automáticamente con la fecha y hora actuales cada vez que un usuario inicie sesión en la aplicación. El uso de auto_now es útil cuando se desea hacer un seguimiento del último inicio de sesión de un usuario, ya que elimina la necesidad de actualizar manualmente el campo cada vez que un usuario inicie sesión.

Modelos Django - Campos booleanos

En los campos booleanos tenemos el siguiente código:

# Campos booleanos
esta_activa = models.BooleanField(default=True)
es_personal = models.BooleanField(default=False)

Los campos booleanos en Django se utilizan para almacenar valores booleanos en la base de datos, es decir, valores que pueden ser True o False.

esta_activa es un campo booleano que se utiliza para indicar si la cuenta de usuario está activa o no. Si este campo es True, significa que la cuenta está activa; de lo contrario, si es False, significa que la cuenta no está activa.

Por otro lado, es_personal es un campo booleano que se utiliza para indicar si la cuenta de usuario pertenece a un miembro del personal de la aplicación o no. Si este campo es True, significa que la cuenta pertenece a un miembro del personal; de lo contrario, si es False, significa que la cuenta no pertenece a un miembro del personal.

Ambos campos booleanos tienen un valor predeterminado (default=True para esta_activa y default=False para es_personal). Esto significa que si no se proporciona un valor para estos campos al crear un nuevo objeto de usuario, se utilizarán estos valores predeterminados.

Los campos booleanos son útiles para modelar características de una entidad que tienen dos posibles valores, como sí o no, activo o inactivo, verdadero o falso, etc. En el caso del modelo de usuarios, estos campos pueden utilizarse para hacer búsquedas y filtrados en la base de datos según el estado de la cuenta o si el usuario es miembro del personal.


Modelos Django - Campos con opciones

En los campos con opciones tenemos el siguiente código:

# Campos con opciones
OPCIONES_ROL = [
  ('usuario', 'Usuario normal'),
  ('admin', 'Administrador'),
]
roles = models.CharField(max_length=7, choices=OPCIONES_ROL, default='usuario')

En este trozo de código, se ha definido un campo llamado roles que utiliza el tipo de campo CharField para almacenar una cadena de texto que representa el rol de un usuario en el sistema. Este campo utiliza las opciones definidas en la variable OPCIONES_ROL para limitar las opciones posibles que pueden ser seleccionadas para este campo.

La "constante" OPCIONES_ROL es una lista de tuplas que define las opciones posibles para el campo roles. Cada tupla tiene dos elementos: el primer elemento es el valor que se almacenará en la base de datos para esa opción, y el segundo elemento es la etiqueta que se mostrará en la interfaz de usuario para esa opción.

En este ejemplo, se han definido dos opciones posibles: "usuario" y "administrador". El primer elemento de cada tupla es la cadena de texto que se almacenará en la base de datos para esa opción, y el segundo elemento es la etiqueta que se mostrará en la interfaz de usuario para esa opción.

El parámetro max_length=7 en el campo roles, especifica la longitud máxima que puede tener la cadena de texto que se almacenará en la base de datos para este campo.

El parámetro default='usuario' en el campo roles, especifica el valor por defecto que se utilizará si no se especifica ningún valor para este campo al crear una nueva instancia del modelo.

Dejamos el capítulo aquí, en el siguiente, empezamos ya a crear una pequeña página web que utilice y almacene datos mediante el uso de este modelo de Django.

Espero que con esto, entiendas un poco mejor los modelos de Django.

No te pierdas nada del curso Máster en Python.


Deja una respuesta

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

curso django Entrada anterior [DJANGO] Introducción a los modelos
backend frontend Entrada siguiente Introducción al Backend y Frontend: Guía para principiantes