我的模型中有一个字段与此name = models.CharField(max_length=100, unique=True)
类似,但现在该表/模型包含大量数据,需要将True
更改为False
,但无需删除桌子再次打开它,我该怎么做?
答案 0 :(得分:1)
使用以下方法生成新迁移:
python manage.py makemigrations
以上内容将检测模型的更改并生成迁移类,但尚未执行任何sql。
生成/应用sql到db:
python manage.py migrate
如果你想在更新数据库之前看到将执行的sql,请在migrate
之前执行此操作:
python sqlmigrate {app_label} {migration_module}
编辑:以上内容将使用后缀__old
重命名您的表,创建一个新表并将旧数据插入新表中,然后删除原始表。所以不确定这是不是你想要的......
另一种选择是使用普通的sql来实现你想要的目标:
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
但请记住,为了使新版本的迁移更新,请找到将您的字段声明为唯一的迁移类,并将unique=True
更改为unique=False
。如果需要更新任何其他服务器,您也可以在那里运行drop constraint命令,以便一切都同步。
答案 1 :(得分:1)
只需在模型中将值更改为False,然后进行迁移和迁移。这会将DB中的所有项目更新为新值。如果您使用较新版本的South而不使用syncdb。