Django имеет models.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)
в URL Я мог бы просто использовать
(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)
...
URL-адреса будут выглядеть как
example.com/blog/23/why-iam-here/
Есть три вещи, которые заставляют меня принять этот метод
- Поле слияния не приходит с неявной уникальностью.
-
get_object_or_404(Blog, pk=id)
должен быть быстрее, чемget_object_or_404(Blog, slug=slug)
. - Добавление поля slug к существующим моделям включает перенос данных.
так почему SlugField()?, кроме затрат на динамическое создание пули, каковы недостатки вышеуказанного метода?