Python 在现有表中生成slug字段
我有一张数据表。是否可能在现有表格上自动生成段塞字段?或者还有其他选择吗?谢谢 这是我的桌子Python 在现有表中生成slug字段,python,django,Python,Django,我有一张数据表。是否可能在现有表格上自动生成段塞字段?或者还有其他选择吗?谢谢 这是我的桌子 您可以在MySQL中这样做(将表名替换为“tableName”): 这会将“这是一个标题”这样的标题更改为“这是一个标题”这样的小标题 编辑要处理括号并删除双空格,请使用: UPDATE `tableName` SET `slug`=LOWER( REPLACE( REPLACE( REPLACE( REPLACE( `title` , '(' , '' ) , ')' , '' ) , ' ' ,
您可以在MySQL中这样做(将表名替换为“tableName”): 这会将“这是一个标题”这样的标题更改为“这是一个标题”这样的小标题 编辑要处理括号并删除双空格,请使用:
UPDATE `tableName` SET `slug`=LOWER( REPLACE( REPLACE( REPLACE( REPLACE( `title` , '(' , '' ) , ')' , '' ) , ' ' , ' ' ) , ' ' , '-' ) );
使用模板过滤器,您可以编写脚本,或循环shell中的对象
>>> from django.template.defaultfilters import slugify
>>> for obj in MyModel.objects.all():
... obj.slug = slugify(obj.title)
... obj.save()
我有一个方便的模型,我在所有的项目中都使用它。我认为这是一个很好的例子,说明如何做你想做的事
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
谢谢,但我的标题也有括号。你可以继续嵌套REPLACE(),直到你处理完所有的目标角色。这太棒了,但我想让slug由两列组成,比如title和category。然后是什么查询。我得到了解决方案更新
products
SETslug
=LOWER(REPLACE(REPLACE)(REPLACE)(REPLACE(REPLACE)(CONCAT(title
,“-”,category
),“(”,“,”,“,”,”,“,”),“,”,“-”);我不知道你的意思。上面的代码片段将为数据库中的所有现有记录设置slug。如果您想为将来添加的所有记录更新slug,那么您可以重写save方法-例如,请参阅@Tom's answer。@谢谢,但出现了错误<代码>名称错误:未定义名称“实例”谢谢Alasdair,使用autoslug中的AutoSlugField命令保存我的时间谢谢。为什么我会犯这个错误?`def__unicode__(self):缩进错误:unident与任何外部缩进级别都不匹配`请检查您的空格。您的空间是太多还是太少?你是在混合制表符和空格吗?
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