我有一个uuid
字段(不是主键)。生成的迁移是:
from __future__ import unicode_literals
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
dependencies = [
....
]
operations = [
...
migrations.AddField(
model_name='device',
name='uuid',
field=models.UUIDField(default=uuid.uuid4, unique=True),
),
...
]
但是做的时候python manage.py migrate
它崩溃了:
django.db.utils.IntegrityError:无法创建唯一索引
“restaurants_device_uuid_key”详细信息:密钥
(uuid)=(f3858ded-b8e0-4ac0-8436-8a61b10efc73) 重复。
奇怪的是,主键似乎没有出现问题(主键可能是由数据库创建的,而不是 django 内部创建的?)
如何添加 uuid 字段并确保迁移有效?
下面是一个通过 RunPython 调用在一次迁移中完成所有操作的示例。
# -*- coding: utf-8 -*
from __future__ import unicode_literals
from django.db import migrations, models
import uuid
def create_uuid(apps, schema_editor):
Device = apps.get_model('device_app', 'Device')
for device in Device.objects.all():
device.uuid = uuid.uuid4()
device.save()
class Migration(migrations.Migration):
dependencies = [
('device_app', 'XXXX'),
]
operations = [
migrations.AddField(
model_name='device',
name='uuid',
field=models.UUIDField(blank=True, null=True),
),
migrations.RunPython(create_uuid),
migrations.AlterField(
model_name='device',
name='uuid',
field=models.UUIDField(unique=True)
)
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)