class TodoList(models.Model): title = models.CharField(maxlength=100) slug = models.SlugField(maxlength=100) def save(self): self.slug = title super(TodoList, self).save()
I'm assuming the above is how to create and store a slug when a title is inserted into the table TodoList, if not, please correct me!
Anyhow, I've been looking into pre_save() as another way to do this, but can't figure out how it works. How do you do it with pre_save()?
is it like
def pre_save(self): self.slug = title
I'm guessing no. What is the code to do this?
Most likely you are referring to django's
pre_save signal. You could setup something like this:
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)
If you dont include the sender argument in the decorator, like
@receiver(pre_save, sender=MyModel), the callback will be called for all models.
You can put the code in any file that is parsed during the execution of your app,
models.py is a good place for that.
@receiver(pre_save, sender=TodoList) def my_callback(sender, instance, *args, **kwargs): instance.slug = slugify(instance.title)