Skip to main content
 首页 » 编程设计

python之Django 中的 SlugField 和覆盖保存

2024年10月24日33zdz8207

我正在编写应用程序并同时学习。我即将在我的模型中实现一个 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 

请您参考如下方法:

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

在您的示例中,每次保存模型实例时,save 方法都会使用函数 slugify() 将名称值转换为 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 字段包含输入,保存方法将根据名称输入的值填充它。