Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Populating django field with 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() 

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?

Thanks!

like image 715
Derek Avatar asked Jun 23 '11 23:06

Derek


1 Answers

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.

like image 66
Bernhard Vallant Avatar answered Sep 27 '22 21:09

Bernhard Vallant