python – 使用uuid字段的Django迁移会生成重复的值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用uuid字段的Django迁移会生成重复的值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1298字,纯文字阅读大概需要2分钟。
内容图文
我有一个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迁移时,它崩溃了:
django.db.utils.IntegrityError: could not create unique index
“restaurants_device_uuid_key” DETAIL: Key
(uuid)=(f3858ded-b8e0-4ac0-8436-8a61b10efc73) is duplicated.
奇怪的是,主键(它可能是由数据库创建的,而不是由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)
)
]
内容总结
以上是互联网集市为您收集整理的python – 使用uuid字段的Django迁移会生成重复的值全部内容,希望文章能够帮你解决python – 使用uuid字段的Django迁移会生成重复的值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。