1

次のデータベース設定を使用しています

DATABASES = {
    'default': {
         'ENGINE': 'django.db.backends.sqlite3',
         'NAME': os.path.join(_DB_DIR, 'dev.db'),
         'TEST_NAME': os.path.join(_DB_DIR, 'dev_test.db'),
    }
}

ただし、実行するたびpython manage.py testに壊れます。問題はテストデータベースにあるようです。何らかの理由で、標準データベースの同じテーブルがそこに作成されていません。コマンドは を返しますdjango.db.utils.DatabaseError: no such table: tbforms_userprofile。実際、sqlite3 を使用して dev_test.db を開くと、指定されたテーブル (および tbforms アプリケーションからの他のテーブル) が存在しないことがわかります。

私は何が欠けていますか?SqliteでDjango 1.4を使用しています

PS: syncdb と migrate がスムーズに実行されることに注意してください。完全なトレースバックは、http: //pastebin.com/9dVmuVytから入手できます。

4

1 に答える 1

1

説明したように、ここでの問題は、User モデル (syncdb 中に作成される) がプロファイル モデル (syncdb の後で、south の移行時に作成される) を作成するための保存後の信号があることです。そのため、syncdb (またはテスト) が新しいデータベースにテーブルを作成し、新しいユーザーを作成すると、ユーザー プロファイルのテーブルがまだ作成されていないため、このエラーが発生します。

ソリューション:

  • ユーザーの作成時にこのプロファイルを自動的に作成しないようにします (悪臭がします)。
  • Django 1.5 を使用すると、カスタム ユーザー モデルがサポートされます
  • テスト用に south を無効にし (SOUTH_TESTS_MIGRATE = False)、常に syncdb --all を指定して新しいデータベースを作成し、その後 --fake を移行します。(ただし、最善の解決策ではありません)
于 2013-08-05T06:54:24.790 に答える