以前は「unique」がTrueに設定されていたCharFieldのモデルがありますが、現在はFalseに変更されています。しかし、存在するものでそのフィールドを保存しようとすると、djangoはIntegrityErrorをスローします。
明確でない値を許可するようにこの動作を変更するにはどうすればよいですか?
データベースはMySQLです。
以前は「unique」がTrueに設定されていたCharFieldのモデルがありますが、現在はFalseに変更されています。しかし、存在するものでそのフィールドを保存しようとすると、djangoはIntegrityErrorをスローします。
明確でない値を許可するようにこの動作を変更するにはどうすればよいですか?
データベースはMySQLです。
http://south.aeracode.orgを使用することをお勧めします。これはDjango用のDB移行アプリであり、MySQL shell/adminに触れることなくそのような変更を加えることができます。このようにして、任意のコンピューターを最新のDBスキームに更新するための一種の再生可能なマクロがあります。
そしてそれを使用することは彼らがここに書いたものと同じくらい簡単です:http ://south.aeracode.org/wiki/ConvertingAnApp
一意のインデックスを削除します。
Webアプリケーションを再実行する前に、コマンドラインで「pythonmanage.pysyncdb」コマンドを使用してdjangoでデータベースを再同期したことを確認しましたか?これで問題が解決する可能性があります。
私は同じことをしようとしていましたが、django-south 0.5の時点では、southがこれを処理していないことがわかりました。
前のコメントで述べたように、おそらく最初に南の移行を作成する必要がありますが、最初のsyncdbを実行するときに、djangoが最初に作成する一意のインデックスを手動で削除する必要があります。
use mydb;
desc mytable;
これにより、テーブルのスキーマが表示され、フィールドのキー列に「UNI」の値が残っていることがわかります。
SHOW INDEX FROM mytable FROM mydb;
Non_uniqueが0に設定されているインデックスである必要があります。
ALTER TABLE mytable DROP INDEX indexname;
テーブルスキーマをもう一度見ると、「UNI」がキー列に表示されていないことがわかります。