2017-10-13 6 views
0

最近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 

しかし、私のプロジェクトには保留中のマイグレーションがないので、それは何もしません。

この不思議な問題をどうやって解決できますか?

答えて

1

あなたはauth.Userに外部キーを持っている任意のアプリがある場合は、それらのアプリケーションの初期移行が認証アプリのdependency持っていることを確認してください:

class Migration(migrations.Migration): 

    dependencies = [('auth', '__first__')] 
+0

まあ、彼らは明らかにこの依存関係を持っている 'migrations.swappable_dependencyを(settings.AUTH_USER_MODEL) ' – dabadaba

+0

カスタムユーザーモデルをお持ちですか? – Alasdair

+0

afaik私たちはDjangoのネイティブユーザを使用しています。しかし、ここで私がちょうど見つけたことは、あなたはそれが奇妙だと思いますか?これは私たちのモデルの一つの属性です: 'admins = models.ManyToManyField( 'auth.User')'。その後、シェルから、そのモデルのインスタンスをdbから取得しています。 'instance.admins.first()'の型を出力して、 'django.contrib.auth.models.User'を出力します。それでは、どのように属性が 'auth.User'として定義されていますか?おそらくこれはDjangoのアップグレードによって引き継がれたエラーですか?しかし、どのようにして移行が最初に機能しましたか?ここに何か変わったことがありますか? – dabadaba

関連する問題