15

我有一个带有默认值为 uuid4 的 CharField 字段的模型:

f = models.CharField(default=uuid4, max_length=36, unique=True, blank=True)

这导致以下错误:

无法为模型“m”成功创建字段“f”:未定义名称“UUID”。

运行迁移命令!我可以解决这个问题吗?到目前为止,我尝试过:

  • 在模块中为 uuid 定义一个“包装函数”(即:def getUUID())
  • 通过覆盖模型构造函数来设置“f”的默认值

...但问题仍然存在:(

附言。我知道我可以向南指导自定义字段,但我认为我没有使用自定义字段:P

4

3 回答 3

16

我解决了在模型模块中定义以下辅助函数的问题:

from uuid import uuid4

def generateUUID():
    return str(uuid4())

然后:

f = models.CharField(default=generateUUID, max_length=36, unique=True, editable=False)

south 将生成一个带有生成的 UUID 的迁移文件 (migrations.0001_initial),例如:

default='5c88ff72-def3-4842-8d48-a75bb3240bb5'

这很不高兴...因为该字符串是“静态的”,而是必须使用辅助函数动态创建...无论如何,在 django 的世界中,al 似乎按预期工作...我在数据库中添加了一些记录和一个为每个生成新的 UUID。然后,我通过向我的模型添加几个字段来尝试我的第一个模式迁移,并且它们已按预期添加到数据库表中。

于 2013-02-23T15:02:58.627 回答
8

您还可以在迁移中导入 UUID:

from uuid import UUID
于 2014-01-19T18:50:08.243 回答
0

我只是从“node_modules”目录中删除了一个 uuid 目录。

然后我重新安装了 uuid 并且它起作用了。

希望对你们有帮助 <3

于 2019-07-18T08:58:57.517 回答