Modelos Django – Part 2

Un modelo de Django es la característica incorporada que utiliza Django para crear tablas, sus campos y varias restricciones. En resumen, Django Models es el SQL de la base de datos que se usa con Django. SQL (lenguaje de consulta estructurado) es complejo e implica muchas consultas diferentes para crear, eliminar, actualizar o cualquier otra cosa relacionada con la base de datos. Los modelos de Django simplifican las tareas y organizan las tablas en modelos. Generalmente, cada modelo se asigna a una sola tabla de base de datos. 
Este artículo trata sobre cómo se pueden usar los modelos de Django para almacenar datos en la base de datos de manera conveniente. Además, podemos usar el panel de administración de Django para crear, actualizar, eliminar o recuperar campos de un modelo y varias operaciones similares. Los modelos de Django brindan simplicidad, consistencia, control de versiones y manejo avanzado de metadatos. Los conceptos básicos de un modelo incluyen: 
 

  • Cada modelo es una clase de Python que subclasifica django.db.models.Model.
  • Cada atributo del modelo representa un campo de base de datos.
  • Con todo esto, Django le brinda una API de acceso a la base de datos generada automáticamente; ver Realización de consultas .

Ejemplo – 
 

Python3

from django.db import models
 
# Create your models here.
class GeeksModel(models.Model):
    title = models.CharField(max_length = 200)
    description = models.TextField()

Django mapea los campos definidos en los modelos de Django en campos de tabla de la base de datos como se muestra a continuación. 
 

django-models

Usando modelos de Django

Para usar Django Models, uno necesita tener un proyecto y una aplicación trabajando en él. Después de iniciar una aplicación, puede crear modelos en app/models.py. Antes de comenzar a usar un modelo, veamos cómo iniciar un proyecto y crear una aplicación llamada geeks.py
 

Consulte los siguientes artículos para comprobar cómo crear un proyecto y una aplicación en Django. 
 

Crear un modelo

Sintaxis 
 

from django.db import models
        
class ModelName(models.Model):
        field_name = models.Field(**options)

Para crear un modelo, en geeks/models.py Ingrese el código, 
 

Python3

# import the standard Django Model
# from built-in library
from django.db import models
 
# declare a new model with a name "GeeksModel"
class GeeksModel(models.Model):
        # fields of the model
    title = models.CharField(max_length = 200)
    description = models.TextField()
    last_modified = models.DateTimeField(auto_now_add = True)
    img = models.ImageField(upload_to = "images/")
 
        # renames the instances of the model
        # with their title name
    def __str__(self):
        return self.title

Cada vez que creamos un modelo, eliminamos un modelo o actualizamos algo en cualquiera de los modelos.py de nuestro proyecto. Necesitamos ejecutar dos comandos makemigrations y migrate. makemigrations básicamente genera los comandos SQL para las aplicaciones preinstaladas (que se pueden ver en las aplicaciones instaladas en settings.py) y el modelo de su aplicación recién creada que agrega en las aplicaciones instaladas, mientras que la migración ejecuta esos comandos SQL en el archivo de la base de datos. 
Así que cuando corremos, 
 

Python manage.py makemigrations

Consulta SQL para crear el modelo anterior a medida que se crea una tabla y 
 

 Python manage.py migrate

crea la tabla en la base de datos.
Ahora que hemos creado un modelo, podemos realizar varias operaciones, como crear una Fila para la tabla o, en términos de Django, Crear una instancia de Modelo. Para saber más, visite – Modelo de aplicación básica de Django – Hacer migraciones y migrar 
 

Renderizar un modelo en la interfaz de administración de Django

Para representar un modelo en el administrador de Django, debemos modificar app/admin.py. Vaya a admin.py en la aplicación geeks e ingrese el siguiente código. Importe el modelo correspondiente de models.py y regístrelo en la interfaz de administración.
 

Python3

from django.contrib import admin
   
# Register your models here.
from .models import GeeksModel
   
admin.site.register(GeeksModel)

Ahora podemos comprobar si el modelo se ha renderizado en Django Admin. La interfaz de administración de Django se puede usar para implementar gráficamente CRUD (Crear, Recuperar, Actualizar, Eliminar). 
 

Django-Models-render-admin

Para obtener más información sobre la representación de modelos en la administración de Django, visite – Modelo de representación en la interfaz de administración de Django
 

Django CRUD: insertar, actualizar y eliminar datos

Django nos permite interactuar con sus modelos de base de datos, es decir, agregar, eliminar, modificar y consultar objetos, usando una API de abstracción de base de datos llamada ORM (Object Relational Mapper). Podemos acceder al ORM de Django ejecutando el siguiente comando dentro de nuestro directorio de proyectos.
 

python manage.py shell

Adición de objetos
Para crear un objeto del modelo Álbum y guardarlo en la base de datos, debemos escribir el siguiente comando:
 

>>>> a = GeeksModel(

         title = "GeeksForGeeks",  

         description = "A description here",

         img = "geeks/abc.png"

         )

>>> a.save()

Recuperando objetos 
Para recuperar todos los objetos de un modelo, escribimos el siguiente comando:
 

>>> GeeksModel.objects.all()
<QuerySet [<GeeksModel: Divide>, <GeeksModel: Abbey Road>, <GeeksModel: Revolver>]>

Modificar objetos existentes 
Podemos modificar un objeto existente de la siguiente manera:
 

>>> a = GeeksModel.objects.get(id = 3)
>>> a.title = "Pop"
>>> a.save()

Eliminación de objetos 
Para eliminar un solo objeto, necesitamos escribir los siguientes comandos:
 

>>> a = Album.objects.get(id = 2)
>>> a.delete()

Para consultar la publicación detallada del ORM (Objeto) de Django, visite Django ORM – Inserción, actualización y eliminación de datos
 

Validación de campos en un modelo

Las validaciones de campo incorporadas en los modelos de Django son las validaciones predeterminadas que vienen predefinidas para todos los campos de Django. Cada campo viene con validaciones integradas de los validadores de Django. Por ejemplo, IntegerField viene con una validación incorporada de que solo puede almacenar valores enteros y eso también en un rango particular. 
Ingrese el siguiente código en el archivo models.py de la aplicación geeks
 

Python3

from django.db import models
from django.db.models import Model
# Create your models here.
 
class GeeksModel(Model):
    geeks_field = models.IntegerField()
 
    def __str__(self):
        return self.geeks_field

Después de ejecutar makemigrations y migrar en Django y renderizar el modelo anterior, intentemos crear una instancia usando la string » GfG is Best «. 
 

built-in-validation-django-models

Puede ver en la interfaz de administración, uno no puede ingresar una string en un IntegerField. Del mismo modo, cada campo tiene sus propias validaciones. Para obtener más información sobre las validaciones, visite Validaciones de campo integradas: modelos de Django
 

Más sobre los modelos de Django –

Lista de campos y tipos de datos del modelo básico

La parte más importante de un modelo y la única parte requerida de un modelo es la lista de campos de base de datos que define. Los campos se especifican mediante atributos de clase. Aquí hay una lista de todos los tipos de campo usados ​​en Django. 
 

Nombre del campo Descripción
Campo automático Es un IntegerField que se incrementa automáticamente.
BigAutoField Es un número entero de 64 bits, muy parecido a un AutoField excepto que se garantiza que se ajusta a números del 1 al 9223372036854775807.
BigIntegerField Es un número entero de 64 bits, muy parecido a un IntegerField excepto que se garantiza que se ajusta a números desde -9223372036854775808 hasta 9223372036854775807.
BinaryField Un campo para almacenar datos binarios sin procesar.
campo booleano Un campo verdadero/falso. 
El widget de formulario predeterminado para este campo es CheckboxInput.
CharField Es una string archivada para entradas de tamaño pequeño a grande.
campo de fecha Una fecha, representada en Python por una instancia datetime.date
  Se usa para la fecha y la hora, representada en Python por una instancia de datetime.datetime.
campo decimal Es un número decimal de precisión fija, representado en Python por una instancia Decimal.
DuraciónCampo Un campo para almacenar períodos de tiempo.
Campo de correo electrónico Es un CharField que verifica que el valor sea una dirección de correo electrónico válida.
campo de archivo Es un campo de carga de archivos.
campo flotante Es un número de punto flotante representado en Python por una instancia flotante.
campo de imagen Hereda todos los atributos y métodos de FileField, pero también valida que el objeto cargado sea una imagen válida.
CampoEntero Es un campo entero. Los valores de -2147483648 a 2147483647 son seguros en todas las bases de datos compatibles con Django.
Campo de dirección IP genérico Una dirección IPv4 o IPv6, en formato de string (por ejemplo, 192.0.2.30 o 2a02:42fe::4).
NullBooleanField Como BooleanField, pero permite NULL como una de las opciones.
CampoEnteroPositivo Como un IntegerField, pero debe ser positivo o cero (0).
CampoEnteroPequeñoPositivo Como un PositiveIntegerField, pero solo permite valores bajo un cierto punto (dependiente de la base de datos).
campo de babosas Slug es un término periodístico. Un slug es una etiqueta corta para algo, que contiene solo letras, números, guiones bajos o guiones. Por lo general, se utilizan en las URL.
SmallIntegerField Es como un IntegerField, pero solo permite valores bajo un cierto punto (dependiente de la base de datos).
Campo de texto Un campo de texto grande. El widget de formulario predeterminado para este campo es un área de texto.
Campo de tiempo Una hora, representada en Python por una instancia de datetime.time.
campo URL Un CharField para una URL, validado por URLValidator.
campo UUIID Un campo para almacenar identificadores únicos universales. Utiliza la clase UUID de Python. Cuando se usa en PostgreSQL, se almacena en un tipo de datos uuid; de lo contrario, en char(32).

Campos de relación

Django también define un conjunto de campos que representan relaciones.

Nombre del campo Descripción
Clave externa Una relación de muchos a uno. Requiere dos argumentos posicionales: la clase con la que está relacionado el modelo y la opción on_delete.
MuchosAMuchosCampo Una relación de muchos a muchos. Requiere un argumento posicional: la clase con la que se relaciona el modelo, que funciona exactamente igual que para ForeignKey, incluidas las relaciones recursivas y perezosas.
campo uno a uno Una relación de uno a uno. Conceptualmente, esto es similar a ForeignKey con unique=True, pero el lado «inverso» de la relación devolverá directamente un único objeto.

Opciones de campo

Las opciones de campo son los argumentos dados a cada campo para aplicar alguna restricción o impartir una característica particular a un campo en particular. Por ejemplo, agregar un argumento null = True a CharField le permitirá almacenar valores vacíos para esa tabla en la base de datos relacional. 
Estas son las opciones de campo y los atributos que puede usar un CharField.

Opciones de campo Descripción
Nulo Si es True , Django almacenará valores vacíos como NULL en la base de datos. El valor predeterminado es Falso .
Vacío Si es True , el campo puede estar en blanco. El valor predeterminado es Falso .
columna_db El nombre de la columna de la base de datos que se usará para este campo. Si no se proporciona, Django usará el nombre del campo. 
 
Defecto El valor predeterminado para el campo. Puede ser un valor o un objeto invocable. Si es invocable, se llamará cada vez que se cree un nuevo objeto. 
 
texto de ayuda Texto adicional de «ayuda» que se mostrará con el widget de formulario. Es útil para la documentación incluso si su campo no se usa en un formulario. 
 
Clave primaria Si es Verdadero, este campo es la clave principal para el modelo.
editable Si es False , el campo no se mostrará en el administrador ni en ningún otro ModelForm. También se omiten durante la validación del modelo. El valor predeterminado es Verdadero
 
error de mensajes El argumento error_messages le permite anular los mensajes predeterminados que generará el campo. Pase un diccionario con claves que coincidan con los mensajes de error que desea anular. 
 
texto de ayuda Texto adicional de «ayuda» que se mostrará con el widget de formulario. Es útil para la documentación incluso si su campo no se usa en un formulario. 
 
nombre_verbose Un nombre legible por humanos para el campo. Si no se proporciona el nombre detallado, Django lo creará automáticamente utilizando el nombre del atributo del campo, convirtiendo los guiones bajos en espacios. 
 
validadores Una lista de validadores para ejecutar para este campo. Consulte la documentación de los validadores para obtener más información. 
 
Único Si es Verdadero, este campo debe ser único en toda la tabla. 
 

Publicación traducida automáticamente

Artículo escrito por NaveenArora 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 *