问题描述
class TodoList(models.Model): title = models.CharField(maxlength=100) slug = models.SlugField(maxlength=100) def save(self): self.slug = title super(TodoList, self).save()
我假设以上是在将标题插入桌子上时如何创建和存储sl,如果没有,请纠正我!
无论如何,我一直在研究pre_save()作为另一种方法,但无法弄清楚它是如何工作的.您如何使用pre_save()?
它就像
def pre_save(self): self.slug = title
我猜不.执行此操作的代码是什么?
谢谢!
推荐答案
您很可能是指 django的pre_save signal .您可以设置这样的东西:
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)
如果您不在装饰符中包含发件人参数,例如@receiver(pre_save, sender=MyModel),则将调用所有型号.
您可以将代码放在执行应用程序期间解析的任何文件中,models.py是一个很好的地方.
其他推荐答案
@receiver(pre_save, sender=TodoList) def my_callback(sender, instance, *args, **kwargs): instance.slug = slugify(instance.title)
其他推荐答案
您可以使用django Signals.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")
问题描述
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!
推荐答案
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)
其他推荐答案
you can use django signals.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")