更改 django 中的 slug 使用 slugify

Use*_*511 4 python django

我有代码来创建 slug 自动使用slugify。但是当我编辑标题时,不会用新标题生成。

这是代码model.py

class Tag(models.Model):

title           = models.CharField(max_length=50)
slug            = models.CharField(max_length=200, null=True, blank=True)
description     = models.TextField()
created_date    = models.DateTimeField(auto_now_add=True)
published_date  = models.DateTimeField(blank=True, null=True)

def publish(self):
    self.published_date = timezone.now()
    self.save()

def save(self):
    if not self.slug:
        self.slug = slugify(self.title)
    return super(Tag, self).save()

def __str__(self):
    return self.title
Run Code Online (Sandbox Code Playgroud)

你能帮忙解决这个问题吗?

mu *_*u 無 7

在您当前的代码中,仅当 slug 以前不存在时才进行 slugify。仅当您第一次保存时,或标题不存在,或 slug 为空时,才会出现这种情况。

相反,每次更改 slug 时都需要保存它(这又取决于标题)。

因此,将您的保存方法更改为:

def save(self, *args, **kwargs):
    self.slug = slugify(self.title)
    return super(Tag, self).save(*args, **kwargs))
Run Code Online (Sandbox Code Playgroud)

更新说明:经过一些测试,结果证明最好只传递 args 和 kwargs,因为您无法知道需要处理哪些参数。基于这个答案