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”有什么好处?
\n\n我们可以
\nslugify将值存储在 CharField 中,对吧?那么为什么我们需要 SlugField 来做一些可以轻松使用的事情CharField呢?
ASlugField是一个CharField,但是一个特殊的CharField。它是一个包含验证器的字段,例如,如果您通过表单输入数据,该验证器将验证输入的字符串是否确实是 slug。例如,slug 不包含空格,因此如果您SlugField在表单中使用 ,以便作者可以自己指定 slug,它将拒绝此类 slug。
默认情况下,它使用django.core.validators.validate_slugvalidator\xc2\xa0 [GitHub]。有SlugField一个额外的参数allow_unicode。如果设置为True,它将使用django.core.validators.validate_unicode_slugvalidator\xc2\xa0 [GitHub]。
所以本质上它确实是一个,但有一个由**参数\xc2\xa0 [Django-doc]CharField确定的验证器。因此这使得它更加方便。allow_unicode=\xe2\x80\xa6
通常,您不想对 slug 字段本身的内容进行 slugify,而是对另一个字段的内容进行 slugify,例如博客文章条目的标题。因此,您仍然想保留标题,但制作一个 slugified 变体。
\n包django-autoslug\xc2\xa0 [readthedocs]提供了一个AutoSlugField\xc2\xa0 [readthedocs],它更方便,因为你可以定义如何填充该字段,因此它会自动slugify:
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
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |