Как сделать так, чтобы случайная строка в модели 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 не является случайной уникальной строкой.
Что мне делать? Есть ли у вас какие-нибудь рекомендации по выбору случайной строки, чтобы убедиться, что она будет уникальной?
можно создать uniq-индекс в базе данных и кэшировать ошибки при записи в базу данных и получении коллизий
.вы можете использовать (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