Django中的SlugField并覆盖保存

时间:2015-10-16 17:48:09

标签: python django

我正在编写应用程序并同时学习。我即将在我的模型中实现一个SlugField,我在Tango上使用Django在代码中找到了一段代码,作者覆盖了保存功能。我很难理解为什么会这样做。

Tango与Django的代码:

from django.template.defaultfilters import slugify

class Category(models.Model):
    name = models.CharField(max_length=128, unique=True)
    views = models.IntegerField(default=0)
    likes = models.IntegerField(default=0)
    slug = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
            self.slug = slugify(self.name)
            super(Category, self).save(*args, **kwargs)

    def __unicode__(self):
            return self.name

1 个答案:

答案 0 :(得分:2)

使用覆盖save方法是在每次保存模型实例时执行一些操作。

在您的示例中,每次保存模型的实例时,save方法都会将名称值转换为带有函数slugify()的slug值,并将其保存到slug字段中。

这是一种自动将名称值转换为slug然后将其保存在slug字段中的方法。

def save(self, *args, **kwargs):
        #this line below give to the instance slug field a slug name
        self.slug = slugify(self.name)
        #this line below save every fields of the model instance
        super(Category, self).save(*args, **kwargs) 

例如,在此模型的表单中,您不必包含slug字段的输入,save方法将根据名称输入的值填充它。