我正在尝试使用现有数据转发模型 . 该模型有一个新的字段,其约束唯一= True和null = False . 当我做
./manage.py schemamigration myapp --auto
South让我通过询问为新字段指定默认值:
Specify a one-off value to use for existing columns now
通常我将其设置为None,但由于此字段必须是唯一的,我想知道是否可以通过以下方式传递South的唯一值:
>>> import uuid; uuid.uuid1().hex[0:35]
这给了我一个错误信息
! Invalid input: invalid syntax
在通过命令行迁移时是否可以传递South随机唯一默认值?
谢谢 .
5 回答
不幸的是,只有
datetime
模块可用作模式移植中的一次性值 .但是,通过将其拆分为三个迁移,您可以实现相同的效果:
在没有约束的情况下向模型添加新字段(null = True,unique = False)
使用数据迁移将UUID添加到新字段
在新字段上添加约束(null = False,unique = True)
数据迁移教程:http://south.readthedocs.org/en/0.7.6/tutorial/part3.html#data-migrations
在django 1.7中,您可以执行以下操作 . 它首先添加没有索引的字段,也没有唯一的 . 然后它分配唯一值(我根据名称和你需要创建的slugify方法),最后再次改变字段以添加索引和唯一属性 .
Here是Django关于迁移独特领域的官方方法 .
您可以手动编辑迁移文件:
我需要在某些字段中添加随机字符,因此我导入了随机和randint
并将默认值更改为
有效 .
有办法为South的每一行做独特的 Value .
将models.py中的slug定义为:
创建新迁移
运行python manage.py schemamigration --auto foo
打开新的迁移文件,然后进行编辑: