首页 > 解决方案 > 主键的 django uuid 或 hashid 字段?以及如何在生成的 ID 前加上“cust_”

问题描述

我目前正在使用django-shortuuidfield在Customer模型上生成唯一的 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场在空间和时间上是唯一的。但是,这会生成一个类似于的 id B9fcKdMDHbwKCBoADjbNyA,我想在它前面加上前缀,cust_使它像这样cust_B9fcKdMDHbwKCBoADjbNyA。如何在不进行多次数据库调用的情况下实现这一目标?

我还研究了django-hashid-field,它支持开箱即用的前缀,但这并不能保证 UUID,并且在更大范围内,我们可能会遇到不受欢迎的唯一包含失败的问题。

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

标签: djangodjango-modelsprimary-keyuuiddjango-model-field

解决方案


可能是一个陈旧的线程,但我最近自己遇到了这个问题。我最终只是分叉和修改了 ShortUUIDField 模块以可选地包含前缀和后缀。我不得不承认,这是一项很糟糕的工作,但我想我会为后代分享。

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

像这样使用:

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

推荐阅读