在现有表中生成slug字段

时间:2011-11-01 19:21:32

标签: python django

我有数据表。是否可以在现有表格上自动生成slug字段?还是有其他选择吗?谢谢 这是我的表

enter image description here

3 个答案:

答案 0 :(得分:17)

使用slugify模板过滤器,您可以编写脚本,或循环遍历shell中的对象。

>>> from django.template.defaultfilters import slugify
>>> for obj in MyModel.objects.all():
...     obj.slug = slugify(obj.title)
...     obj.save()

答案 1 :(得分:4)

我有一个便利模型,我在所有项目中使用这些东西。我认为这是如何做你想做的一个很好的例子。

from django.template.defaultfilters import slugify


class NameAndSlug(models.Model):
    '''
    convenience model for things that are just names
    '''
    name = models.CharField(max_length=200, unique=True)
    slug = models.SlugField()

    def __unicode__(self):
        return self.name

    def save(self, *args, **kwargs):
        """
        Slugify name if it doesn't exist. IMPORTANT: doesn't check to see
        if slug is a dupe!
        """
        if not self.slug:
            self.slug = slugify(self.name)
        super(NameAndSlug, self).save(*args, **kwargs)

    class Meta:
        abstract = True

答案 2 :(得分:3)

您可以在MySQL中执行此操作(将表的名称替换为“tableName”):

UPDATE `tableName` SET `slug`=LOWER(REPLACE( `title` , ' ' , '-' ));

这会将“This Is A Title”等标题更改为“this-is-a-title”等标题。

编辑要处理括号并删除双空格,请使用:

UPDATE `tableName` SET `slug`=LOWER( REPLACE( REPLACE( REPLACE( REPLACE( `title` , '(' , '' ) , ')' , '' ) , '  ' , ' ' ) , ' ' , '-' ) );