Anulando el método de guardar – Modelos de Django

El método de guardar es un método heredado de models.Model que se ejecuta para guardar una instancia en un modelo en particular. Cada vez que se intenta crear una instancia de un modelo, ya sea desde la interfaz de administración o desde el shell de Django, se ejecuta la función save(). Podemos anular la función de guardar antes de almacenar los datos en la base de datos para aplicar alguna restricción o llenar algunos campos listos solo como SlugField
Técnicamente, no se recomienda anular el método de guardar para implementar dichas funcionalidades porque cualquier error en el método de guardar permite bloquear toda la base de datos. Entonces, si es perfecto para escribir el método de guardado y el manejo de errores o no intenta guardar el método e intenta implementar estas funcionalidades en formularios, vistas, modelos, etc.
 

Django anulando la explicación del método de guardado

Ilustración de cómo anular el método de guardar usando un ejemplo. Considere un proyecto llamado geeksforgeeks que tenga una aplicación llamada geeks. 
 

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

Ingrese el siguiente código en el archivo models.py de la aplicación geeks . Usaremos CharField para experimentar con todas las opciones de campo. Anularemos el método de guardar para llenar el SlugField automáticamente. 
 

Python3

from django.db import models
 
# importing slugify from django
from django.utils.text import slugify
 
# Create your models here.
class GeeksModel(models.Model):
    title = models.CharField(max_length = 200)
    slug = models.SlugField()
 
    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(GeeksModel, self).save(*args, **kwargs)

Expliquemos lo que sucede en el código anterior. El método save() de su clase principal debe anularse, por lo que usamos la palabra clave super . slugify es una función que convierte cualquier string en un slug. así que estamos convirtiendo el título para formar una babosa básicamente. Intentemos crear una instancia con «Gfg es el mejor sitio web». 
 

django-models-overriding-save-method

Veamos lo que hemos creado en la interfaz de administración. 
 

django-overriding-save-method

Conceptos avanzados con anulación del método de guardar

Como se define al comienzo de este artículo, a menudo no se recomienda anular el método de guardado. Vamos a comprobar por qué? 
El código anterior recrea el slug cada vez que se usa el método de guardado o si se realiza algún cambio en el modelo. 
La segunda razón es si uno necesita cambiar el título solamente, pero no el slug, ya que el slug está redirigiendo a un enlace en particular y está clasificado en algún motor de búsqueda. Se crearía un gran problema en un servidor de producción. Esto hace que el uso de este método de validación sea lamentablemente incorrecto. Puede haber varias formas de resolver el problema anterior, uno puede declarar slug como campo de solo lectura y luego, antes de realizar cambios en slug en el método anulado, podemos verificar si está vacío. Esto puede resolver el problema. Entonces, como se recomienda hasta que pueda manejar los errores en el método de guardado, no lo anule.
 

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 *