如何确保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)

但有时这会有一些错误,因为段塞字段不是唯一的python随机不是随机的唯一字符串。

我该怎么办?你有没有建议随机使用这些字符串,以确保它是唯一的?

  1. 您可以在数据库中创建uniq索引,并在写入数据库时缓存错误,并获得冲突

  2. 您可以使用(UUID+矿渣(。UUID是根据当前时间生成的,它允许garanti唯一性https://docs.python.org/3/library/uuid.html

您应该使用uuid而不是random。

Python的uuid模块提供了一个符合RFC 4122的实现,以生成唯一标识符:

import uuid
slug = str(uuid.uuid4())

如果你想避免使用短划线(-(,你也可以使用十六进制表示:

slug = uuid.uuid4().hex

最新更新