Djangoプロジェクトを新しいシステムにインストールし、Django 1.4をインストールしました。しかし、manage.py runserver
またはmanage.py syncdb
を実行しようとすると、南からこのエラーが発生します:
Validating models...
Unhandled exception in thread started by <bound method Command.inner_run of <Django.contrib.staticfiles.management.commands.runserver.Command object at 0x1a67810>>
Traceback (most recent call last):
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/Django/core/management/commands/runserver.py", line 91, in inner_run
self.validate(display_num_errors=True)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/Django/core/management/base.py", line 266, in validate
num_errors = get_validation_errors(s, app)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/Django/core/management/validation.py", line 30, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/Django/db/models/loading.py", line 158, in get_app_errors
self._populate()
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/Django/db/models/loading.py", line 64, in _populate
self.load_app(app_name, True)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/Django/db/models/loading.py", line 88, in load_app
models = import_module('.models', app_name)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/Django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/south/models.py", line 2, in <module>
from south.db import DEFAULT_DB_ALIAS
File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/south/db/__init__.py", line 78, in <module>
db = dbs[DEFAULT_DB_ALIAS]
KeyError: 'default'
現在SQliteを使用しています。これが原因かもしれないと思います change with Django 1.4、しかし他のユーザーは私の問題を抱えていないようです。私のパッケージはすべて最新です。
settings
に正しい [〜#〜]データベース[〜#〜] がありません。 'default'
という名前のデータベースが必要です
同じエラーメッセージが表示されますが、受け入れられた回答とは原因と解決策が異なります。簡単な答えは、SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}
をsettings.py
に追加することです。
完全な説明は次のとおりです。
south/db/__init__.py
をトレースすると、データベースが検出されなかったことがわかります。これは、データベースエンジン名がsouth/db/__init__.py
のハードコードされたリストにないためです。
engine_modules = {
'Django.db.backends.postgresql_psycopg2': 'postgresql_psycopg2',
'Django.db.backends.sqlite3': 'sqlite3',
'Django.db.backends.mysql': 'mysql',
'Django.db.backends.Oracle': 'Oracle',
'sql_server.pyodbc': 'sql_server.pyodbc', #Django-pyodbc
'sqlserver_ado': 'sql_server.pyodbc', #Django-mssql
'firebird': 'firebird', #Django-firebird
'Django.contrib.gis.db.backends.postgis': 'postgresql_psycopg2',
'Django.contrib.gis.db.backends.spatialite': 'sqlite3',
'Django.contrib.gis.db.backends.mysql': 'mysql',
'Django.contrib.gis.db.backends.Oracle': 'Oracle',
'doj.backends.zxjdbc.postgresql': 'postgresql_psycopg2', #Django-jython
'doj.backends.zxjdbc.mysql': 'mysql', #Django-jython
'doj.backends.zxjdbc.Oracle': 'Oracle', #Django-jython
}
私はWindowsでpostgis2.0を使用していますが、しばらく前にDjangoのpostgisバックエンドにマイナーパッチを適用する必要がありました。ソースからDjangoをインストールしなかったので、バックエンドのコピーを作成し、そのコピーにパッチを手動で適用しました。したがって、新しいバックエンドは別の場所にあり、その場所はありません。上記のSouthのengine_modules
のキーのリストにあるt。
幸い、SouthはSOUTH_DATABASE_ADAPTERS
という設定変数を提供しており、各エイリアスの実際のデータベースエンジンを直接Southに通知します。この行をsettings.py
に挿入した後、syncdb
を実行できました。
SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}
私の場合、Herokuを使用している人向けです。私もこの問題を発見しました。herokuガイドで指摘されているように、デフォルトのデータベースが設定されています。
DATABASES['default'] = dj_database_url.config()
ただし、ketError'default 'エラーは引き続き表示されます。これは、データベースがプロビジョニングされていないため、dj_database_url
それを見つけることができず、その紛らわしいエラーを引き起こしました。
これを解決するには、データベースをプロビジョニングして、 heroku postgresql で説明されているようにプロモートします。
heroku addons:add heroku-postgresql:dev
heroku pg:promote HEROKU_POSTGRESQL_BLUE