class TodoList(models.Model):
title = models.CharField(maxlength=100)
slug = models.SlugField(maxlength=100)
def save(self):
self.slug = title
super(TodoList, self).save()
Je suppose que ce qui précède est comment créer et stocker un slug lorsqu'un titre est inséré dans la table TodoList, sinon corrigez-moi!
Quoi qu'il en soit, j'ai cherché dans pre_save () un autre moyen de le faire, mais je ne peux pas comprendre comment cela fonctionne. Comment faites-vous avec pre_save ()?
est-ce que c'est comme
def pre_save(self):
self.slug = title
Je devine non. Quel est le code pour le faire?
Merci!
Vous vous référez probablement à le signal pre_save
de Django . Vous pouvez configurer quelque chose comme ceci:
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 vous n'incluez pas l'argument de l'expéditeur dans le décorateur, comme @receiver(pre_save, sender=MyModel)
, le rappel sera appelé pour tous les modèles.
Vous pouvez placer le code dans n'importe quel fichier analysé lors de l'exécution de votre application. models.py
est un bon emplacement pour cela.
@receiver(pre_save, sender=TodoList)
def my_callback(sender, instance, *args, **kwargs):
instance.slug = slugify(instance.title)
vous pouvez utiliser Django signaux.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")
Les fonctions du récepteur doivent être comme ceci:
def my_callback(sender, **kwargs):
print("Request finished!")
Notez que la fonction utilise un argument sender, ainsi que les arguments de mot clé générique (** kwargs); tous les gestionnaires de signaux doivent prendre ces arguments.
Tous les signaux envoient des arguments mot clé et peuvent modifier ces arguments à tout moment.
Référence ici .