I have just installed my Django project on a new system, and installed Django 1.4. However when I try to run manage.py runserver
or manage.py syncdb
I
I have the same error message but with a different cause and solution compared to the accepted answer. The short answer is adding SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}
to settings.py
.
Here is the full explanation:
Tracing to south/db/__init__.py
shows that no database was detected, the reason being that my database engine name is not in the hardcoded list in 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
}
I use postgis 2.0 on Windows and a while ago had to apply a minor patch to django's postgis backend. Because I didn't install django from source, I made a copy of the backend and applied the patch manually to that copy. So the new backend is in a different location, and that location isn't in the list of keys in South's engine_modules
shown above.
Luckily, South provides a settings variable called SOUTH_DATABASE_ADAPTERS
that tells South directly the actual database engine of each alias. I was able to run syncdb
after inserting this line into settings.py
SOUTH_DATABASE_ADAPTERS = {'default':'south.db.postgresql_psycopg2'}