填充Django模型中的现有字段

时间:2017-10-20 16:54:34

标签: python django migration

我有一个模型,其中一个字段定义为blank=True, null=True。我将两者都更改为False并编写了一个返回随机字符串的可调用函数。我将该功能设置为该字段的default=,然后我运行makemigrationsmigrate,但我在表格中看到空白字段。

这是预期的行为吗?如果是这样,我如何填充所有现有字段?

我正在使用Django 1.10

1 个答案:

答案 0 :(得分:2)

直接应用makemigrations和migrate不会使用函数返回的默认值更新字段的数据。

Migration类中,您可以编写一个实现此功能的函数(更新数据库中的值)

# -*- coding: utf-8 -*-
# Generated by Django A.B on YYYY-MM-DD HH:MM
from __future__ import unicode_literals

from django.db import migrations
import uuid

def gen_uuid(apps, schema_editor):
    MyModel = apps.get_model('myapp', 'MyModel')
    for row in MyModel.objects.all():
        row.uuid = uuid.uuid4()
        row.save(update_fields=['uuid'])

class Migration(migrations.Migration):

    dependencies = [
        ('myapp', '0004_add_uuid_field'),
    ]

    operations = [
        # omit reverse_code=... if you don't want the migration to be reversible.
        migrations.RunPython(gen_uuid, reverse_code=migrations.RunPython.noop),
    ]

来源:Django Writing Migrations (populate_uuid_values.py)