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

dav*_*ode 9 django django-south

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

f = models.CharField(default=uuid4, max_length=36, unique=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

这导致以下错误:

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

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

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

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

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

dav*_*ode 12

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

from uuid import uuid4

def generateUUID():
    return str(uuid4())
Run Code Online (Sandbox Code Playgroud)

然后:

f = models.CharField(default=generateUUID, max_length=36, unique=True, editable=False)
Run Code Online (Sandbox Code Playgroud)

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

default='5c88ff72-def3-4842-8d48-a75bb3240bb5'
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

from uuid import UUID
Run Code Online (Sandbox Code Playgroud)