在django中从“unique = True”更改为“unique = False”

时间:2010-01-13 10:29:53

标签: mysql django unique-key

我有一个带有CharField的模型,之前将“unique”设置为True,但现在更改为False。但是当我尝试使用存在的东西保存该字段时,django仍会抛出IntegrityError。

如何更改此行为,以便允许非不同的值?

数据库是MySQL。

4 个答案:

答案 0 :(得分:2)

我建议使用http://south.aeracode.org,它是Django的数据库迁移应用程序,它允许在不触及MySQL shell / admin的情况下进行此类更改。这样,您就拥有了一种可重放的宏,可以将任何计算机更新为最新的数据库方案。

使用它就像他们在这里写的一样简单:http://south.aeracode.org/wiki/ConvertingAnApp

答案 1 :(得分:1)

删除唯一索引。

答案 2 :(得分:0)

在重新运行Web应用程序之前,您是否已确保在命令行中使用“python manage.py syncdb”命令在django中重新同步数据库?这可能会解决您的问题。

答案 3 :(得分:0)

我试图做同样的事情,发现从django-south 0.5开始,南方不会为你处理这个问题。

就像之前的评论中所说的那样,你应该首先创建你的南迁移,但是你必须手动进入并删除django在你第一次执行syncdb时最初创建的唯一索引。

use mydb;
desc mytable;

这将显示该表的架构,您将看到该字段在键列中的值仍为“UNI”。

SHOW INDEX FROM mytable FROM mydb;

应该是将Non_unique设置为0的索引。

ALTER TABLE mytable DROP INDEX indexname;

如果再次查看表模式,您将看到“UNI”不再位于键列中。