mer*_*1er 2 django django-models
我已将 UUID 添加到以下模型:
class Post(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
...
Run Code Online (Sandbox Code Playgroud)
但数据库中已经存在一些在没有该uuid字段的情况下创建的条目。
当我运行时migrate,它会将相同的 UUID 添加到我以前的所有对象中。
是否有一种简单的方法可以自动使用不同的 UUID 填充现有对象?
我认为解决这个问题最简单的方法是进行数据迁移[Django-doc]。您可以使用以下命令创建新的迁移文件:
python manage.py makemigrations --empty yourappnameRun Code Online (Sandbox Code Playgroud)
这将在目录中创建一个不执行任何操作的新文件migrations/。我们可以使用如下所示的内容更改迁移文件:
# Generated by Django 3.2 on 2021-05-01 12:49
from django.db import migrations
from uuid import uuid4
class Migration(migrations.Migration):
def populate_uuid(apps, schema_editor):
Post = apps.get_model('yourappname', 'Post')
posts = list(Post.objects.all())
for post in posts:
post.uuid = uuid4()
Post.objects.bulk_update(posts, ['uuid'])
dependencies = [
('yourappname', 'previous_migrationname'),
]
operations = [
migrations.RunPython(populate_uuid)
]Run Code Online (Sandbox Code Playgroud)
如果您随后进行迁移,它将加载所有Post对象,为每个对象提供唯一的 uuid,然后批量更新项目。
| 归档时间: |
|
| 查看次数: |
954 次 |
| 最近记录: |