2016-08-15 212 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字段。