2016-08-15 179 views
2

我有一個模型定義了超過100+的數據在我的數據庫中。我想自動填充一個slug字段,並且看到它顯示在管理員中,因爲爲100多個字段添加新條目並不是我想要做的。自動填充彈頭字段django

AutoSlug()領域似乎並不奏效,當我把它添加到我的模型並進行遷移,prepopulated_fields = {'slug': ('brand_name',)}不使用它我admin.py內工作,以及我嘗試添加的廢料作爲缺省的字段我模型中所需的字段名稱,但無濟於事解決方案無效。

他們的任何其他建議如何獲得預填充的slu filed?

class Brand(models.Model): 

    brand_name = models.CharField(unique=True, max_length=100, blank=True, default="", verbose_name=_('Brand Name')) 

    slug = models.SlugField(max_length=255, verbose_name=_('Brand Slug'), default=brand_name) 

回答

3

您可以嘗試爲品牌類添加保存方法。

from django.template.defaultfilters import slugify 

class Brand(models.Model): 
... 

def save(self, *args, **kwargs): 
    self.slug = slugify(self.brand_name) 
    super(Brand, self).save(*args, **kwargs) 

然後運行:

python manage.py shell 

>>>from app.models import Brand 
>>>brands = Brands.objects.all() 
>>>for brand in brands: 
>>> brand.save() 

而且,我會改變BRAND_NAME變種,只是名稱。

+0

請注意,使用bulk_create模型的save()方法將不會被調用,pre_save和post_save信號將不會被髮送! – Daviddd

0

我想我有一個想法,這將做的工作,但我不知道如果這將是最好的辦法做到這一點。

我會用slugify函數。我會創建一個視圖 - 在它被調用後 - 將獲取所有模型的對象,遍歷它們並使用django.utils.text.slugify函數和模型的brand_name作爲值填充每個模型的slug字段。