Django中的SlugField和覆盖保存

发布于 2021-01-29 16:39:12

我正在编写一个应用程序并同时学习。我将在我的模型中实现一个SlugField,在我与Django在Tango上发现的示例代码段中,作者覆盖了save函数。我很难理解他们为什么要这么做。

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
关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

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

    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方法将根据名称输入的值填充该字段。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看