Django 将“我的模型”字段中的unique=True更改为unique=False

Django 将“我的模型”字段中的unique=True更改为unique=False,django,django-models,Django,Django Models,我的模型中有一个字段是这样的name=models.CharField(max_length=100,unique=True),但是现在表/模型有很多数据,需要将True更改为False,但不必删除表并再次读取它,我如何才能做到这一点?使用以下方法生成新迁移: python manage.py makemigrations 以上内容将检测对模型的更改,并生成一个迁移类,但尚未执行任何sql 要对数据库生成/应用sql,请执行以下操作: python manage.py migrate 如果要

我的模型中有一个字段是这样的
name=models.CharField(max_length=100,unique=True)
,但是现在表/模型有很多数据,需要将
True
更改为
False
,但不必删除表并再次读取它,我如何才能做到这一点?

使用以下方法生成新迁移:

python manage.py makemigrations
以上内容将检测对模型的更改,并生成一个迁移类,但尚未执行任何sql

要对数据库生成/应用sql,请执行以下操作:

python manage.py migrate
如果要查看更新数据库之前将执行的sql,请在迁移之前执行此操作:

python sqlmigrate {app_label} {migration_module}
编辑:上述操作将使用后缀
\uu old
重命名您的表,创建一个新表并将数据从旧表插入新表,然后删除原始表。所以我不确定这是否是你想要的

另一种选择是使用普通sql实现您想要的:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

但是请记住,为了更新迁移以适应新的运行,请查找将字段声明为唯一的迁移类,并将
unique=True
更改为
unique=False
。如果需要更新任何其他服务器,您也可以在那里运行drop constraint命令,以便所有内容都同步。

只需将模型中的值更改为False,然后进行迁移和迁移。这会将数据库中的所有项目更新为新值。如果您使用的是South的较新版本,而不是syncdb。

实际上我使用的是Django 1.8.5,所以在使用
python manage.py makemigrations时我不使用South。
我得到了“未检测到任何更改”谢谢,我使用的是纯sql,显然,我更喜欢使用django,但我需要快速解决这个问题。当然,您可以使用sql修复它,然后调整迁移脚本。到目前为止,您是如何处理迁移的?迁移目录中是否有0001_initial.py和其他文件?