0

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

我怎样才能改变这种行为,以便它允许非不同的值?

数据库是 MySQL。

4

4 回答 4

2

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

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

于 2010-02-02T18:00:06.330 回答
0

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

就像之前的评论中所说的那样,您可能应该先创建南迁移,但随后您将不得不手动进入并删除 django 在执行第一个同步数据库时最初创建的唯一索引。

use mydb;
desc mytable;

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

SHOW INDEX FROM mytable FROM mydb;

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

ALTER TABLE mytable DROP INDEX indexname;

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

于 2010-02-02T17:36:28.803 回答
0

删除唯一索引。

于 2010-01-13T10:31:16.003 回答
0

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

于 2010-01-13T17:21:36.210 回答