我有一个mixin可以为任何模型添加UUID:
class UUIDable(models.Model):
uuid = UUIDField(db_index=True,
default=uuid.uuid4,
editable=False)
class Meta:
abstract = True
我有一个包含Article
个对象的现有数据库。
我刚刚使用上面的mixin向Article
类添加了一个uuid字段。
运行迁移后,我的所有文章现在都具有 SAME UUID。
我希望所有对象都有不同的UUID。
为什么?
以下是自动创建的迁移文件:
class Migration(migrations.Migration):
dependencies = [
('products', '0009_auto_20171218_1630'),
]
operations = [
migrations.AddField(
model_name='article',
name='uuid',
field=models.UUIDField(db_index=True, default=uuid.uuid4, editable=False),
),
]
答案 0 :(得分:0)
您的迁移正在添加一个单一值,您需要在迁移期间更改它。请看这个链接:"Migrations that add unique fields"
尝试更改迁移中的字段:
from django.db import migrations, models
import uuid
def create_uuid(apps, schema_editor):
Article = apps.get_model('products', 'Article')
for device in Article.objects.all():
device.uuid = uuid.uuid4()
device.save()
class Migration(migrations.Migration):
dependencies = [
('products', '0009_auto_20171218_1630'),
]
operations = [
migrations.AddField(
model_name='article',
name='uuid',
field=models.UUIDField(blank=True, null=True),
),
migrations.RunPython(create_uuid),
migrations.AlterField(
model_name='article',
name='uuid',
field=models.UUIDField(unique=True)
)
]