我正在使用以下代码为模型对象的每个新实例生成一个UUID:
def make_uuid(type):
"""Takes an entity type identifier string as input and returns a hex of UUID2 with a
type identifier pre-pended for readability"""
return str(type)+str(uuid.uuid1().hex)
模型字段:
account_uuid = models.CharField(max_length=34, default=make_uuid('AC'), db_index=True, unique=True)
当我实际运行应用程序时,第一次尝试很有效,但第二次和所有后续尝试都失败,并显示以下消息:
异常类型:IntegrityError
异常值:重复键值违反唯一约束 “accounts_accounts_account_uuid_key”
关于可能发生的事情的任何想法?
答案 0 :(得分:0)
您正在将make_uuid调用的结果而不是可调用对象传递给默认值。
您的代码等于以下代码。
default_uuid = make_uuid('AC')
account_uuid = models.CharField(max_length=34, default=default_uuid, db_index=True, unique=True)
字段的默认值。这可以是值或可调用的 宾语。如果是可调用的,则每次有新对象时都会调用它 创建
您可以使用partial或lambda生成新的uuid函数。
from functools import partial
account_uuid = models.CharField(
max_length=34,
default=partial(make_uuid,'AC')
)