2015-10-16 69 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

我希望它很清楚 –