Как правильно создавать slug на Django?
Можно, но если тебе потребуется реализовать связь m2m (например, принадлежность постов нескольким группам), то тебе придется в таблице-связке этот слаг дублировать. Не знаю, насколько это удобно, ведь слаг может меняться вообще - и придется его менять в нескольких таблицах. Или, скажем, тебе потребуется хранить в отдельной таблице "лайки" постов. В одном случае там у тебя будет post_id, на которое будет повешен внешний ключ на поле id (pk) в таблице с постами, а в другом тебе придется опять slug прописывать. По памяти, если что, varchar больше места занимает, чем int, индексы для таких столбцов, соответственно, тоже.
Тем более, если ты в этой же таблице будешь хранить историю изменений, то тебе придется slug дублировать. Так что primay_key=True внезапно уже бы не годилось на этом поле.
почему бы не - это реально неверный вопрос. Верным будет зачем мне это?
В документации написано, что unique=True уже создаёт индекс. Для primary_key есть автонумеруемое поле id (pk). Индекс по integer намного компактнее и быстрее чем индекс по string, поэтому предпочтительнее для pk. Так что не создавай себе проблем на ровном месте.