django中SlugField有什么用?

Kal*_*mar 4 django django-models

注意:请不要将其视为重复帖子,所有现有帖子都没有给出对 SlugField 的清晰理解。

我的问题是“我们可以将值存储在 CharField 中,对吧?那么为什么我们需要 SlugField 来完成可以使用 CharField 轻松完成的事情呢?”

例如,在我的模型中,我有一个名为

url = models.CharField(max_length=30)
def save(self, ...):
    self.url = slugify(self.url)
    .......
Run Code Online (Sandbox Code Playgroud)

url不会以slugified格式保存在数据库中吗?我可以在浏览器中使用这个slugified值,那么创建models.SlugFIeld(max_length=30)有什么用呢?SlugField 与 slugified CharField 相比有何优势?

在上面的代码中,用“SlugField”替换“CharField”有什么好处?

Wil*_*sem 8

\n

我们可以slugify将值存储在 CharField 中,对吧?那么为什么我们需要 SlugField 来做一些可以轻松使用的事情CharField呢?

\n
\n

ASlugField是一个CharField,但是一个特殊的CharField。它是一个包含验证器的字段,例如,如果您通过表单输入数据,该验证器将验证输入的字符串是否确实是 slug。例如,slug 不包含空格,因此如果您SlugField在表单中使用 ,以便作者可以自己指定 slug,它将拒绝此类 slug。

\n

默认情况下,它使用django.core.validators.validate_slugvalidator\xc2\xa0 [GitHub]。有SlugField一个额外的参数allow_unicode。如果设置为True,它将使用django.core.validators.validate_unicode_slugvalidator\xc2\xa0 [GitHub]

\n

所以本质上它确实是一个,但有一个由**参数\xc2\xa0 [Django-doc]CharField确定的验证器。因此这使得它更加方便。allow_unicode=\xe2\x80\xa6

\n

通常,您不想对 slug 字段本身的内容进行 slugify,而是对另一个字段的内容进行 slugify,例如博客文章条目的标题。因此,您仍然想保留标题,但制作一个 slugified 变体。

\n

django-autoslug\xc2\xa0 [readthedocs]提供了一个AutoSlugField\xc2\xa0 [readthedocs],它更方便,因为你可以定义如何填充该字段,因此它会自动slugify:

\n
from autoslug import AutoSlugField\n\nclass MyModel(models.Model):\n    title = models.CharField(max_length=128)\n    slug = AutoSlugField(populate_from=\'title\')
Run Code Online (Sandbox Code Playgroud)\n