outsider_x
@outsider_x
Изучаю Python

Как правильно создавать slug на Django?

Как правильно создавать slug на Django?
Раньше я использовал SlugField и unique=True. И в других примерах тоже видел такое:
slug = models.SlugField(unique=True)

Теперь я узнал про настройку primary_key и у меня возник вопрос, почему бы не создавать slug иначе:
slug = models.SlugField(primay_key=True)
  • Вопрос задан
  • 469 просмотров
Решения вопроса 1
@dimuska139
Backend developer
Можно, но если тебе потребуется реализовать связь m2m (например, принадлежность постов нескольким группам), то тебе придется в таблице-связке этот слаг дублировать. Не знаю, насколько это удобно, ведь слаг может меняться вообще - и придется его менять в нескольких таблицах. Или, скажем, тебе потребуется хранить в отдельной таблице "лайки" постов. В одном случае там у тебя будет post_id, на которое будет повешен внешний ключ на поле id (pk) в таблице с постами, а в другом тебе придется опять slug прописывать. По памяти, если что, varchar больше места занимает, чем int, индексы для таких столбцов, соответственно, тоже.

Тем более, если ты в этой же таблице будешь хранить историю изменений, то тебе придется slug дублировать. Так что primay_key=True внезапно уже бы не годилось на этом поле.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Guest007
@Guest007
Django, Python, Linux и всё такое...
почему бы не
- это реально неверный вопрос. Верным будет
зачем мне это?

В документации написано, что unique=True уже создаёт индекс. Для primary_key есть автонумеруемое поле id (pk). Индекс по integer намного компактнее и быстрее чем индекс по string, поэтому предпочтительнее для pk. Так что не создавай себе проблем на ровном месте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы