主键的 django uuid 或 hashid 字段?以及如何在生成的 ID 前加上前缀 "cust_"

django uuid or hashid field for primary keys? and how to prefix the generated ids with say "cust_"

我目前正在使用 django-shortuuidfieldCustomer 模型上生成唯一的 UUID 主键,如下所示

class Customer(models.Model):
    customer_id = ShortUUIDField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=255, blank=False)

这保证 customer_id 字段对于 space 和时间是唯一的。但是,这会生成一个类似于 B9fcKdMDHbwKCBoADjbNyA 的 id,我想在它前面加上 cust_ 以使其像这样 cust_B9fcKdMDHbwKCBoADjbNyA。如何在不进行多次数据库调用的情况下实现这一目标?

我还研究了 django-hashid-field,它支持开箱即用的前缀,但这并不能保证 UUID,并且在更大范围内,我们可能 运行 进入 unique contain 不希望出现的失败问题.

对此有什么想法吗?让我知道...

可能是一个过时的线程,但我最近才遇到这个问题。我最终只是分叉和修改 ShortUUIDField 模块以选择性地包含前缀和后缀。我不得不承认这是一项艰巨的工作,但我想我会为后代分享。

https://github.com/nick-fournier/django-customshortuuidfield

像这样使用:

class Business(models.Model):
     id = CustomShortUUIDField(primary_key=True, prefix="biz_")