Это устаревшая статья, читайте лучше: Использование UUID в качестве PK (Django 2.2+).
Если планируется сделать сервис, который должен обеспечивать синхронизацию между узлами, или есть желание затруднить получение информации по прямому указанию PK записи, то рекомендуется в качестве первичного ключа модели использовать GUID.
Для выполнения всей черновой работы следует создать класс абстрактной модели:
import uuid
class AbstractGUID(models.Model):
""" Абстрактная модель для использования GUID в качестве PK."""
# Параметр blank=True позволяет работать с формами, он никогда не
# будет пустым, см. метод save()
guid = models.CharField(primary_key=True, max_length=32, blank=True)
class Meta:
abstract = True
def save(self, *args, **kwargs):
""" Собственный метод для заполнения поля с первичным ключём."""
if not self.guid or self.guid == u'':
self.guid = uuid.uuid4().get_hex()
super(AbstractGUID, self).save(*args, **kwargs)
Наследуя свои модели от приведённого выше класса, вы автоматически получаете в качестве первичного ключа GUID.
Пример:
class Items(AbstractGUID):
title = models.CharField(_(u'Title'), max_length=256)
class Meta:
verbose_name = _(u'Item')
verbose_name_plural = _(u'Items')