gpt4 book ai didi

django - Django 中的 SlugField 有什么用?

转载 作者:行者123 更新时间:2023-12-05 01:36:22 33 4
gpt4 key购买 nike

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

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

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

的字段
url = models.CharField(max_length=30)
def save(self, ...):
self.url = slugify(self.url)
.......

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

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

最佳答案

We can slugify and store the value in a CharField right? then why do we need SlugField for something that can be done easily using CharField?

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

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

所以本质上它确实是一个 CharField,但是有一个由 **allow_unicode=… parameter [Django-doc] 决定的验证器.这样就更方便了。

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

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

from autoslug import AutoSlugField

class MyModel(models.Model):
title = models.CharField(max_length=128)
slug = <b>AutoSlugField(populate_from='title')</b>

关于django - Django 中的 SlugField 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62157610/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com