南迁移错误:未定义名称“UUID”

时间:2013-02-23 13:55:02

标签: django django-south

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

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

这导致以下错误:

  

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

运行迁移命令!何我能解决这个问题吗?到目前为止我试过了:

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

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

PS。我知道我可以向南方指示自定义字段,但我认为我不使用自定义字段:P

3 个答案:

答案 0 :(得分:11)

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

from uuid import uuid4

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

然后:

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

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

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

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

答案 1 :(得分:4)

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

from uuid import UUID

答案 2 :(得分:0)

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

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

我希望它能帮助你们<3