我正在实施this answer以向具有现有行的数据库添加自动UUIDField
。
建议的数据迁移调整是:
from django_extensions.utils import uuid
def forwards(self, orm):
for item in orm['mypp.myclass'].objects.all():
if not item.uuid:
item.uuid = uuid.uuid4() #creates a random GUID
item.save()
def backwards(self, orm):
for item in orm['mypp.myclass'].objects.all():
if item.uuid:
item.uuid = None
item.save()
但是,我不想允许blank=True
使用我的模型。在这种情况下,我如何调整backwards()
函数?当前item.uuid = None
将不再有效......
答案 0 :(得分:1)
您必须分3个步骤进行迁移:
使用UUIDField
添加null=True
,以便现有行不会破坏约束。
创建数据迁移以填充与当前代码类似的现有行的uuids。
通过从字段声明中删除null=True
,添加另一个带NOT NULL约束的迁移。
PS:您的代码适用于过时的南迁移。 django-migrations的当前等价物是:
def forwards(apps, schema_editor):
MyClass = apps.get_model('myapp', 'MyClass')
for item in MyClass.objects.all():
# [...]