Django: Migration

20th August 2020 at 2:19pm
Django

数据迁移。

Practical Django 2 and Channels 2 的第三章给了一个手写 Migration 文件的例子,可以把非 Django 自动生成、非 DDL 层面或者仅数据层面的变更,用 migration 管理起来:

$ ./manage.py makemigrations main --empty -n productname_capitalize
from django.db import migrations

def capitalize(apps, schema_editor):
    Product = apps.get_model('main', 'Product')
    for product in Product.objects.all():
        product.name = product.name.capitalize()
        product.save()
                
class Migration(migrations.Migration):
    # ...
    operations = [
        migrations.RunPython(
            capitalize,
            migrations.RunPython.noop
        ),
    ]

我觉得这是个很好的实践。把数据变更的过程都在 migration 文件中体现出来。