SlugField在django中有什么用?

jqjz2hbq  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(92)

注:请不要认为这是重复的职位,所有现有的职位是没有给SlugField明确的理解。
我的问题是“我们可以在CharField中存储值,对吗?”那么为什么我们需要SlugField来完成一些可以使用CharField轻松完成的事情呢?“
例如,在我的模型中,我有一个名为

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

字符串
URL不会以slugified格式保存在数据库中吗?我可以在浏览器中使用这个slugified值的权利,那么创建模型有什么用。SlugField(max_length=30)?SlugField比slugified CharField有什么优势?
在上面的代码中,用“SlugField”替换“CharField”有什么好处?

kiayqfof

kiayqfof1#

我们可以slugify并将值存储在CharField中,对吗?那么为什么我们需要SlugField来完成一些可以使用CharField轻松完成的事情呢?
一个SlugField是一个CharField,但一个特殊的CharField。这是一个包含 validator 的字段,如果您通过表单输入数据,则该字段将验证输入的字符串是否确实是slug。例如,slug不包含空格,所以如果您在表单中使用SlugField,这样作者可以自己指定slug,它将拒绝这样的slug。
默认使用**django.core.validators.validate_slug验证器[GitHub]。SlugField有一个额外的参数allow_unicode。如果设置为True,它将使用django.core.validators.validate_unicode_slug验证器[GitHub]。
因此,本质上它确实是一个CharField,但具有由
allow_unicode=…参数[Django-doc]确定的验证器。这因此使其更方便。
通常,您不希望slugify slug字段本身的内容,而是从另一个字段,例如博客文章条目的标题。因此,您仍然希望保留标题,但创建一个slugified变体。
django-autoslug package [readthedocs]提供了一个**AutoSlugField**[readthedocs],这更方便,因为你可以定义如何填充字段,因此它会自动slugify:

from autoslug import AutoSlugField

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

字符串

相关问题