Как сделать так, чтобы случайная строка в модели django python была уникальной

У меня вопрос со случайной строкой в python django.

Я создал модель django

class Post(models.Model):
    slug = models.SlugField(unique=True,blank=True)
    title = models.CharField(max_length=200)
    description = models.TextField()

    def save(self, *args, **kwargs):
            str_ran = "abcdefghijklmnopqrstuvwxyz"
            slug = ""
            for i in range(5) :
                slug += random.choice(str_ran)
            self.slug = slug
            super(Post, self).save(*args, **kwargs)

Но иногда это приводит к ошибке, потому что поле slug не уникально, python random не является случайной уникальной строкой.

Что мне делать? Есть ли у вас какие-нибудь рекомендации по выбору случайной строки, чтобы убедиться, что она будет уникальной?

  1. можно создать uniq-индекс в базе данных и кэшировать ошибки при записи в базу данных и получении коллизий

    .
  2. вы можете использовать (UUID + шлак). UUID генерируется на основе текущего времени, это позволяет гарантировать уникальность https://docs.python.org/3/library/uuid.html

    .

Вам следует использовать uuid вместо random.

Модуль uuid в Python предоставляет реализацию, соответствующую RFC 4122, для генерации уникальных идентификаторов:

import uuid

slug = str(uuid.uuid4())

Если вы хотите избежать тире (-), вы также можете использовать шестнадцатеричное представление:

slug = uuid.uuid4().hex
Вернуться на верх