直接適用makemigrationsジャンゴ1.10を使用して、関数から返されるデフォルト値を持つフィールドのデータを更新しない移行しています
..
あなたが関数を書くことができますそれは(あなたのデータベースの値を更新する)ので、実現
# -*- 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_random(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)
デフォルトのV alueは、そのフィールドのデータベースに値がない場合、ORMレイヤが返す値です。 makemigrationsとmigrateを適用しても、データベース内の値は変更しないでください。フィールド値を変更する場合は、この 'https:// stackoverflow.com/questions/29787853/django-migrations-add-field-with-default-with-model-of-model'をチェックすることができます。 –
@ArpitGoyalこれはDateField(またはTime)ではないので、 'auto_now'は私のためには機能しません。 – alexandernst
あなたができることは、 'null = False'と' blank = False'に設定してマイグレーションを実行するので、Djangoはそれらの空のフィールドに値を指定しなければならないというメッセージを表示し、 'str( 'random_message')'シェルから出る –