¿Rellenando el campo django con pre_save ()?

class TodoList(models.Model): title = models.CharField(maxlength=100) slug = models.SlugField(maxlength=100) def save(self): self.slug = title super(TodoList, self).save() 

Supongo que lo anterior es cómo crear y almacenar un slug cuando se inserta un título en la tabla TodoList, si no, corríjame.

De todos modos, he estado buscando en pre_save () como otra forma de hacer esto, pero no puedo entender cómo funciona. ¿Cómo lo haces con pre_save ()?

es como

 def pre_save(self): self.slug = title 

Supongo que no. ¿Cuál es el código para hacer esto?

¡Gracias!

Lo más probable es que te pre_save señal pre_save de django . Podrías configurar algo como esto:

 from django.db.models.signals import pre_save from django.dispatch import receiver from django.template.defaultfilters import slugify @receiver(pre_save) def my_callback(sender, instance, *args, **kwargs): instance.slug = slugify(instance.title) 

Si no incluye el argumento del remitente en el decorador, como @receiver(pre_save, sender=MyModel) , se @receiver(pre_save, sender=MyModel) la callback para todos los modelos.

Puede poner el código en cualquier archivo que se analice durante la ejecución de su aplicación, models.py es un buen lugar para eso.

 @receiver(pre_save, sender=TodoList) def my_callback(sender, instance, *args, **kwargs): instance.slug = slugify(instance.title) 

puedes usar django signal.pre_save:

 from django.db.models.signals import post_save, post_delete, pre_save class TodoList(models.Model): @staticmethod def pre_save(sender, instance, **kwargs): #do anything you want pre_save.connect(TodoList.pre_save, TodoList, dispatch_uid="sightera.yourpackage.models.TodoList") 

Las funciones del receptor deben ser así:

 def my_callback(sender, **kwargs): print("Request finished!") 

Observe que la función toma un argumento remitente , junto con los argumentos de palabras clave comodín (** kwargs) ; Todos los manejadores de señales deben tomar estos argumentos.

Todas las señales envían argumentos de palabras clave , y pueden cambiar esos argumentos de palabras clave en cualquier momento.

Referencia aquí .