Djangomodels.SlugField()
可以帮助我们创建一些看起来很酷的 url。我的问题是为什么将其指定为字段
假设我有这个模型
class Blog(models.Model):
title = models.CharField()
如果我想添加 slug,我可以使用
class Blog(models.Model):
title = models.CharField()
def title_slug(self):
return slugify(self.title)
在网址中我可以使用
(r'^blog/(?P<id>\d+)/(?P<slug>[-\w]+)/$', 'app.views.blog_view'),
并在视图中
def blog_view(request, id ,slug):
get_object_or_404(Blog, pk=id)
...
网址看起来像
example.com/blog/23/why-iam-here/
有三件事让我采用这种方法
- Slug 字段不具有隐含的唯一性。
get_object_or_404(Blog, pk=id)
必须比 快get_object_or_404(Blog, slug=slug)
。- 向现有模型添加 slug 字段涉及数据迁移。
那么为什么是 SlugField()?,除了动态生成 slug 的成本外,上述方法的缺点是什么?