いくつかの移行で構成される django アプリケーションでモデルを統合しようとしています。テストを準備しましたが、実行すると
./manage.py test my_app
次のエラーが表示されます
django.db.utils.OperationalError: (1005, "Can't create table 'test_rhombusdb.#sql-4ca_2c' (errno: 150)")
データベースは正常に作成されているので、データベースを作成する権限があると思います。これがどのテーブルを参照しているのか本当にわかりません。移行は正常に行われ、db は本番環境で正常に動作します。ここで何が問題になる可能性がありますか?
他にどんな情報が欲しいですか?
私のスタックトレース
File "./manage.py", line 18, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 30, in run_from_argv
super(Command, self).run_from_argv(argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 393, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 74, in execute
super(Command, self).execute(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 444, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 90, in handle
failures = test_runner.run_tests(test_labels)
File "/usr/local/lib/python2.7/dist-packages/django/test/runner.py", line 210, in run_tests
old_config = self.setup_databases()
File "/usr/local/lib/python2.7/dist-packages/django/test/runner.py", line 166, in setup_databases
**kwargs
File "/usr/local/lib/python2.7/dist-packages/django/test/runner.py", line 370, in setup_databases
serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True),
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/creation.py", line 368, in create_test_db
test_flush=not keepdb,
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 120, in call_command
return command.execute(*args, **defaults)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 444, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 179, in handle
created_models = self.sync_apps(connection, executor.loader.unmigrated_apps)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 317, in sync_apps
cursor.execute(statement)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 62, in execute
return self.cursor.execute(sql)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/base.py", line 124, in execute
return self.cursor.execute(query, args)
File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "/usr/local/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
django.db.utils.OperationalError: (1005, "Can't create table 'testdb.#sql-4ca_7c' (errno: 150)")
移行が呼び出されるとエラーが発生することがわかります。
PS: 私は自分のデータベース (実際のデータベースではあるが開発用のもの) を削除し、migrate を実行しているテーブルを再作成しようとしました。同じエラーが発生しました。移行を再度実行すると、魅力的に機能しました....ここで何かが本当に本当に間違っています....
PS2: すべての移行フォルダーを削除し、移行フォルダーなしで開始すると、移行フォルダーが存在しない状態で移行を実行した後、同じエラーが発生しました....デバッグが非常に困難な非常に悪いエラー
PS3: モデルの 1 つ (少なくともこれまでにテストしたもの) の外部キーに問題があります。アプリを非アクティブ化して、用語でアクティブ化しようとしましたが、特定のアプリに到達するとエラーが発生しました.1つのモデルを分離して、問題を解決しました。外部キーをコメントアウトして作業しました。それらのいずれかのエラーのコメントを再度解除します。
class Patient(models.Model):
#many fields here
doctor = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="patients")
1.6 と sqlite3 で動作し、1.8 と mysql に移動し、ブーム... エラーが発生しました。
AUTH_USER_MODEL = 'users.MyCustomUser'
MyCustomUser は、AbstractBaseUser と PermissionsMixin を継承するクラスです。