数据迁移。
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 文件中体现出来。