在django中生成唯一的字母数字标识符[重复]

Posted

技术标签:

【中文标题】在django中生成唯一的字母数字标识符[重复]【英文标题】:Generate unique Alphanumeric identifiers in django [duplicate] 【发布时间】:2020-09-11 01:03:04 【问题描述】:

我正在为每个项目将有一个或多个组的项目创建一个跟踪应用程序。我想添加一个字母数字字符串作为组的唯一标识符(类似于主键)。我知道 UUID,但它是一个长字符串,我正在寻找 10-15 个字符长。

你能帮我看看如何生成一个唯一的字符串吗?

我希望字段“project_groupid”作为唯一标识符。

模型.py

class project(models.Model):
    project_name = models.CharField(max_length=130,default="")
    project_customer = models.ForeignKey(customerOrganization, on_delete=models.CASCADE)

class project_target(models.Model):
    project = models.ForeignKey(project, on_delete=models.CASCADE)
    project_groupid = models.CharField(max_length=20,default="")
    group_name = models.CharField(max_length=100,default="")
    group_country = models.CharField(max_length=3,default="US")
    group_language = models.CharField(max_length=3,default="en")

【问题讨论】:

"random.choice" 不保证唯一性。不确定 UUID4 是否会随着时间的推移而具有唯一编号。 我假设 OP 有办法检查新生成的随机字符串是否以前没有被使用过(并重复这个过程直到生成一个唯一的)。 就是这样,但想看看我们是否可以在不检查数据库的情况下生成唯一的 id。 欢迎来到社区!您能否提供一些示例代码。这有助于为其他人回答您的问题提供背景信息。我们经常看到寻求解决方案的请求,而这可能不是解决您的问题的正确方法 当然,代码已更新。我添加了 models.py,其中“project_groupid”应该是每个组的字母数字唯一标识符。 【参考方案1】:

django有一个生成随机字符串的辅助函数get_random_string,用法很简单,传入charts的长度和列表来使用

from django.utils.crypto import get_random_string
get_random_string(10, 'abcdef0123456789')

但是这种方法不授予唯一值,随着时间的推移你可能会得到相同的随机字符串,如果生成的随机标识符已经存在,你应该检查你的数据库

【讨论】:

如果我需要一次生成 50000 个唯一 ID,有什么办法吗? 使用循环来做到这一点

以上是关于在django中生成唯一的字母数字标识符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Access 中生成随机字母数字字符串后检查重复项

Java中生成的UUID(全局唯一标识符-----(唯一)-------)

如何在 Postgres 9.6+ 中生成长度为 N 的随机、唯一的字母数字 ID?

在Java中生成字母数字随机字符串[重复]

Hive中生成随机唯一标识ID的方法

在 Oracle PL/SQL 中生成字母数字序列