我有一个模型,其中一个字段定义为blank=True, null=True
。我将两者都更改为False
并编写了一个返回随机字符串的可调用函数。我将该功能设置为该字段的default=
,然后我运行makemigrations
和migrate
,但我在表格中看到空白字段。
这是预期的行为吗?如果是这样,我如何填充所有现有字段?
我正在使用Django 1.10
答案 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),
]