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.
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).
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 «.
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 –
- Cambiar el nombre para mostrar del objeto usando la función __str__ – Django Models
- Validaciones de campos personalizados en modelos de Django
- Django python manage.py comando de migración
- Modelo de aplicación Django: comando Python manage.py makemigrations
- Lista de campos y tipos de datos del modelo Django
- ¿Cómo usar las opciones de campo de Django?
- Anulando el método de guardar – 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