Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在现有表中生成slug字段_Python_Django - Fatal编程技术网

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
SET
slug
=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