3

いくつかの移行で構成される 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 を継承するクラスです。

4

1 に答える 1