Установить альтернативный pk в Django

Я хотел бы, чтобы Django генерировал идентификатор номера из 6+ цифр для одного Model. Я не хочу начинать с нуля, но я хочу, чтобы этот идентификатор был понятным и удобочитаемым для пользователей. Так что хороший, например: 658975

Как это сделать?

Я пробовал это:

class MyUUIDModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

Но uuid генерирует огромные последовательности, что неудобно для пользователя.

Есть ли у вас какие-либо советы? Возможно, будет достаточно установить минимальное количество автоинкрементов pk.


person Milano    schedule 06.07.2016    source источник


Ответы (2)


Разве вы не можете просто использовать pk + случайное число, чтобы показать пользователю и сохранить остальную логику такой же?

В противном случае вы идете Как сделать так, чтобы первичный ключ начинался с 1000?

Напишите для этого миграцию.

person kawadhiya21    schedule 06.07.2016
comment
Это неплохая идея... но слишком много рефакторинга/переписывания кода. Например, получить запросы с идентификатором и т. д. слишком уязвимы для ошибок в коде. Но если ничего другого, я бы попробовал это. - person Milano; 06.07.2016

Лучшие варианты для установки первичного ключа, чтобы он начинался с 100000. Например (MySQL),

ALTER TABLE django_app_table_name AUTO_INCREMENT = 100000

Поскольку эти команды зависят от поставщика базы данных, лучше написать свою собственную миграцию, используя миграцию Django документации.

person Sivasubramaniam Arunachalam    schedule 06.07.2016