25

Djangoプロジェクトを新しいシステムにインストールし、Django1.4をインストールしました。ただし、実行しようとしmanage.py runserverたりmanage.py syncdb、Southからこのエラーが発生したりすると、次のようになります。

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を使用しています。Django 1.4でのこの変更が原因かもしれないと思いますが、他のユーザーは私の問題を抱えていないようです。私のパッケージはすべて最新です。

4

3 に答える 3

41

同じエラー メッセージが表示されますが、受け入れられた回答とは原因と解決策が異なります。簡単な答えは、に追加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 で postgis 2.0 を使用していますが、少し前に django の postgis バックエンドにマイナー パッチを適用する必要がありました。ソースから django をインストールしなかったため、バックエンドのコピーを作成し、そのコピーに手動でパッチを適用しました。したがって、新しいバックエンドは別の場所にあり、その場所はengine_modules上記の South のキーのリストにはありません。

幸いなことに、South は、SOUTH_DATABASE_ADAPTERS各エイリアスの実際のデータベース エンジンを直接 South に通知する と呼ばれる設定変数を提供します。syncdbこの行を挿入すると実行できましたsettings.py

SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}

于 2013-03-08T03:58:27.377 に答える
20

に正しいデータベースがありませんsettings。名前の付いたデータベースがあるはずです'default'

于 2012-04-08T03:41:52.350 に答える