2015-10-16 68 views
2

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

代码和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

你的问题是什么? –

+0

我想了解为什么在使用slug字段时需要重写save函数。 – user2770624

+0

你的应用程序如何知道创建slu what的是什么字段?例如,在这种情况下 - slug与'name'字段相对。所以,这发生在保存。 – karthikr

回答

1

使用overiding保存方法是执行一些动作每个模型的实例保存时间。

在您的示例中,每次保存模型的一个实例时,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) 

举例来说,在这个模型形式,你不会有以包括塞领域,保存方法将根据名称输入的值来填充它的输入。

+0

我希望它很清楚 –