-
-
Save Guest007/46ad1ab653b47d23cf3cede3f340411b to your computer and use it in GitHub Desktop.
Django migration converting integer pk table to UUID pk table
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from __future__ import unicode_literals | |
import uuid | |
from django.db import migrations, models | |
def fill_mymodel_uuid(apps, schema_editor): | |
db_alias = schema_editor.connection.alias | |
MyModel = apps.get_model('myapp', 'MyModel') | |
for obj in MyModel.objects.using(db_alias).all(): | |
obj.uuid = uuid.uuid4() | |
obj.save() | |
class Migration(migrations.Migration): | |
""" Change model with integer pk to UUID pk. This migration presumes there | |
are no db constraints (foreign keys) to this table. | |
""" | |
dependencies = [ | |
# ... | |
] | |
operations = [ | |
migrations.AddField( | |
model_name='mymodel', | |
name='uuid', | |
field=models.UUIDField(null=True), | |
), | |
migrations.RunPython(fill_mymodel_uuid, migrations.RunPython.noop), | |
migrations.AlterField( | |
model_name='mymodel', | |
name='uuid', | |
field=models.UUIDField(default=uuid.uuid4, serialize=False, editable=False, unique=True), | |
), | |
migrations.RemoveField('MyModel', 'id'), | |
migrations.RenameField( | |
model_name='mymodel', | |
old_name='uuid', | |
new_name='id' | |
), | |
migrations.AlterField( | |
model_name='mymodel', | |
name='id', | |
field=models.UUIDField(primary_key=True, default=uuid.uuid4, serialize=False, editable=False), | |
), | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment