Создание заголовка / слага на основе идентификатора PK - PullRequest
1 голос
/ 08 октября 2009

Каким будет общий способ создания названия записи и клуба на основе идентификатора? Я работаю с Джанго-фотологом здесь. Я хочу сохранить запись с заголовком и слагом на основе ПК. Общая проблема в том, что я не могу получить PK, пока запись не будет сохранена в базе данных. С другой стороны, я не могу сохранить его без заголовка и пули.

Какое общее решение для такого рода проблемы?

Ответы [ 3 ]

1 голос
/ 08 октября 2009

Если ваши URI должны выглядеть как "example.com/${obj.id}-${sluggify( obj.title )}", тогда генерирует эти URI, когда вы используете их . Этот URI не содержит данных, которых уже нет в БД, поэтому не добавляйте их снова. Единственная цель пули - сделать URL привлекательнее для людей и поисковых систем.

Возьмем Stackoverflow в качестве примера: Создание заголовка / слага на основе идентификатора PK

Если вы хотите выбирать только слагом, это должен быть первичный ключ, уникальный и неизменный. Вы должны знать, что наличие другого PK, обычного столбца id, не потребуется.

Я не говорю, что слизняки плохие, и что спасение слизней всегда плохо. Есть много веских причин сохранить их в базе данных, но тогда вам нужно подумать о том, что вы делаете.

С другой стороны, выбор данных по их PK (и игнорирование пули) не требует размышлений, так что это должен быть путь по умолчанию.

1 голос
/ 08 октября 2009

Обычно вы вообще не используете первичный ключ. Если ваша задача состоит в том, чтобы просто автоматически генерировать уникальных слагов (что является единственной причиной, по которой я могу видеть, что вы пытаетесь сделать), то вам нужен AutoSlugField, который создает уникальный слаг, увеличивая добавленное число на слизняк, пока он не станет уникальным.

Существует реализация AutoSlugField, которая является частью django-command-extensions .

0 голосов
/ 08 октября 2009

Для присвоения имени файлу на основе идентификатора записи у вас есть несколько вариантов:

а) Попробуйте предсказать ID:

max_pk = self.__class__.objects.aggregate(max_pk=Max('pk'))['max_pk'] or 0
predicted_id = max_pk+1

b) Переименовать файл в post_save, когда идентификатор известен.

Вы также можете использовать хэш md5 или случайные строки для генерации уникальных имен файлов.

Кстати, есть отдельное приложение django-autoslug .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...