Django:迁移后所有相同的uuid

2024-04-23 16:38:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个mixin可以向任何模型添加UUID:

class UUIDable(models.Model):
    uuid = UUIDField(db_index=True,
                     default=uuid.uuid4,
                     editable=False)

    class Meta:
        abstract = True

我有一个现有的数据库,里面有Article个对象。 我刚刚使用上面的mixin向Article类添加了一个uuid字段。 运行迁移之后,我的所有文章现在都具有相同的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),
        ),
    ]

Tags: 对象falsetruedefaultdbindexuuidmodels
1条回答
网友
1楼 · 发布于 2024-04-23 16:38:26

您的迁移正在添加一个单数值,您需要在迁移过程中更改它。请参阅以下链接:"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)
        )
    ]

相关问题 更多 >