【问题标题】:Django model add uuidDjango模型添加uuid
【发布时间】:2020-09-04 04:45:47
【问题描述】:

Django 2.2 postgres

我将 uuid 添加到我现有的 django 模型中,为已包含记录的表生成并应用迁移:

migrations.AddField(
    model_name='<mymodel>',
    name='uuid',
    field=models.UUIDField(default=uuid.uuid4, editable=False),
),

该字段添加得很好,但是所有现有记录都在 uuid 字段中插入了相同的值。如何使 default=uuid.uuid4 为每个现有记录生成一个新的 uuid 值?

谢谢

【问题讨论】:

    标签: django model migration field uuid


    【解决方案1】:

    为每个模型的唯一 id 添加唯一约束

    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    

    那么您的迁移将如下所示

            migrations.AddField(
                model_name=<<model_name>>,
                name='uuid',
                field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
            ),
    

    鉴于您已添加 import uuid。

    当您现在运行迁移时,它会显示错误,即您以前的记录包含与唯一约束冲突的相同值,因此您可能期待删除或覆盖以前的记录以解决此可能的冲突。

    【讨论】:

    • 当我从表中删除列并尝试重新应用添加 uuid 字段的迁移(现在使用 unique=True),迁移因此错误而终止,并且没有添加任何 uuid 字段:@987654324 @这就是你说的冲突吗?
    • 这个帖子回答了发生这种情况时如何应用迁移:stackoverflow.com/questions/35281003/…
    【解决方案2】:

    原来你不能通过正常的 django 迁移过程(makemigrations / migrate)来做到这一点。您必须将其作为自定义 3 迁移进行,该过程在此处描述:https://docs.djangoproject.com/en/2.2/howto/writing-migrations/#migrations-that-add-unique-fields。感谢Muhammad Hashir Hassan 将我指向有关该主题的讨论,我在其中找到了该文档的链接。

    【讨论】:

    猜你喜欢
    • 2018-05-08
    • 2012-03-08
    • 2019-02-15
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多