我刚刚在一个新系统上安装了我的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与Django 1.4,但其他用户似乎没有我的问题。我的所有套餐都是最新的。
答案 0 :(得分:39)
我有相同的错误消息,但与接受的答案相比,其原因和解决方案不同。简短的回答是将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_DATABASE_ADAPTERS
的设置变量,它直接告诉South每个别名的实际数据库引擎。将此行插入syncdb
settings.py
SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}
答案 1 :(得分:20)
settings
中没有正确的DATABASES。应该有一个名为'default'
答案 2 :(得分:4)
对于那些使用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