0

我正在使用以下代码为模型对象的每个新实例生成一个 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”

关于可能发生什么的任何想法?

4

1 回答 1

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')
)
于 2013-11-14T05:49:45.640 回答