我刚刚在我的模型“Realm”中添加了一个字段“is_capital”,其外键指向“User”。
这就是它的样子:
class Realm(models.Model):
user = models.ForeignKey(User)
is_capital = models.BooleanField( default=False ) #field not synced yet
#...
默认情况下,我希望每个用户的所有记录都将“is_capital”标志设置为false,所有这些都是第一个(或者是随机的)。最后,每个用户应该只有一个“领域”标记为“is_capital”。
所以表格最后应该是这样的:
域
realm_id ; user_id ; is_capital
1 ; 1 ; True
2 ; 1 ; False
3 ; 1 ; False
4 ; 2 ; True
5 ; 2 ; False
我该如何进行此类迁移?我看到的所有示例都只是用一个值填充新列。
答案 0 :(得分:1)
添加架构迁移以使用default=False
添加字段。
python manage.py schemamigration app_name --auto
运行此迁移。
然后创建数据迁移以进行更改
./manage.py datamigration app_name mark_is_capital
在您创建的迁移文件的forwards()
中,写下:
for user in orm.User.objects.all():
realms = orm.Realm.objects.filter(user=user)
if realms:
realm_to_change = realms[0]
realm_to_change.is_capital = True
realm_to_change.save()