最近Djangoを1.8にアップグレードし、新しい開発用データベースを新規にセットアップしました。移行と依存関係は順調に進みました。通常のエラーが発生しても解決してしまいます。アプリは現在、ローカルで正常に動作しています。Django 1.8のテスト問題:ProgrammingError:relation "auth_user"が存在しません
python manage.py test
これは私が取得していますエラーです:テストを実行しようとしたとき
しかし、私はエラーを取得しています
django.db.utils.ProgrammingError: relation "auth_user" does not exist
言うまでもなくを、Djangoの認証モジュールが実際にインストールされており、アプリ内で移行されたので、何が起こっているのか分かりません。ここで
は、あなたがそれを覗いする必要がある場合は、完全なスタックトレースであるが、それは、このエラーの原因を把握するために私にも、リモートで役立つ何も言わdoes't:Traceback (most recent call last):
File "C:/Users/dabadaba/PycharmProjects/dogpatchsports_com/mysite/manage_sched_dev.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\__init__.py", line 354, in execute_from_command_line
utility.execute()
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\test.py", line 30, in run_from_argv
super(Command, self).run_from_argv(argv)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\test.py", line 74, in execute
super(Command, self).execute(*args, **options)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\base.py", line 445, in execute
output = self.handle(*args, **options)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\test.py", line 90, in handle
failures = test_runner.run_tests(test_labels)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\test\runner.py", line 210, in run_tests
old_config = self.setup_databases()
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\test\runner.py", line 166, in setup_databases
**kwargs
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\test\runner.py", line 370, in setup_databases
serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True),
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\db\backends\base\creation.py", line 368, in create_test_db
test_flush=not keepdb,
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\__init__.py", line 120, in call_command
return command.execute(*args, **defaults)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\base.py", line 445, in execute
output = self.handle(*args, **options)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\migrate.py", line 179, in handle
created_models = self.sync_apps(connection, executor.loader.unmigrated_apps)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\migrate.py", line 318, in sync_apps
cursor.execute(statement)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\db\utils.py", line 98, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\db\backends\utils.py", line 62, in execute
return self.cursor.execute(sql)
django.db.utils.ProgrammingError: relation "auth_user" does not exist
私が把握することができますthis answerに続く回避策は、テストタスクがmigrate
を実行するのを防ぎます。これは、私が読んでいることによると、エラーが発生するポイントになるはずです。奇妙なことに、私がmigrate
を実行するとすべてが正常です。
しかし、私は気が散っている回避策に頼らず、設計通りに作業を進めたくなります。さらに、このエラーは、他の何かが実際に間違っていて、修正するべきであるというヒントかもしれません。
いくつかのソリューションが実行されているお勧め:
python manage.py migrate auth
python manage.py migrate
しかし、私のプロジェクトには保留中のマイグレーションがないので、それは何もしません。
この不思議な問題をどうやって解決できますか?
まあ、彼らは明らかにこの依存関係を持っている 'migrations.swappable_dependencyを(settings.AUTH_USER_MODEL) ' – dabadaba
カスタムユーザーモデルをお持ちですか? – Alasdair
afaik私たちはDjangoのネイティブユーザを使用しています。しかし、ここで私がちょうど見つけたことは、あなたはそれが奇妙だと思いますか?これは私たちのモデルの一つの属性です: 'admins = models.ManyToManyField( 'auth.User')'。その後、シェルから、そのモデルのインスタンスをdbから取得しています。 'instance.admins.first()'の型を出力して、 'django.contrib.auth.models.User'を出力します。それでは、どのように属性が 'auth.User'として定義されていますか?おそらくこれはDjangoのアップグレードによって引き継がれたエラーですか?しかし、どのようにして移行が最初に機能しましたか?ここに何か変わったことがありますか? – dabadaba