如何检查生成的uuid是否唯一



为了安全起见,我正在主键之上生成另一个id:

uid = models.CharField(max_length=10, default=uuid.uuid4().hex[:8], editable=False)

但是如何检查它是否是唯一的呢?

只要你每秒不存储大量的项目,你就不必担心uuid4的唯一性。

添加unique=True将强制在此处创建一个唯一的条目,但如果不是唯一的,则save((将失败。如果你真的想确定,你可以这样做:

def generate_unique_uuid(model=None, field='code'):
unique_id= uuid.uuid4()      # or some hex represenation
filter = {field: unique_id}
exists = model.objects.filter(**filter).exists()
while exists:
unique_id= uuid.uuid4()      # or some hex represenation
filter = {field: unique_id}
exists = model.objects.filter(**filter).exists()
return unique_id

def generate_unique_id_your_model():
code = generate_unique_code(model=YourModel, field='uid')
return code
class YourModel(models.Model):
uid = models.CharField(max_length=10, default=generate_unique_id_your_model, editable=False)

或者您可以使用UUID字段:

uid = models.UUIDField(default=uuid.uuid4)

最新更新