Django 1.2 brings multiple databases handling through the use of database routers. The actual version of South (0.7.3) is not able to handle correctly multiple databases projects out of the box.

Here is a workaround: the idea is to create a new fake django project. And then to use South migration within this project.

 cd head_directory
 django-admin.py startproject my_south_db_project
 cd my_south_db_project

Next,edit my_south_db_project/settings.py

  • we have to set the path correctly to south, to your app and to the corresponding database
  • The only installed apps should be South and your app
 
 import sys
 import os.path
 ...  
 current_path = os.path.abspath(os.path.dirname(_ _file_ _))
 head, tail = os.path.split(current_path)
 sys.path.append(os.path.join(head, "my_db_app_dir"))
 sys.path.append(os.path.join(head, "south_sdir"))
 dbpath = os.path.join(head, "my_initial_project_dir")
 ...
 DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.sqlite3',
       'NAME' : os.path.join(dbpath,'my_db_app.sqlite')
       'USER': '',
       'PASSWORD': '',
       'HOST': '',
       'PORT': '',
   },
 }
 ...  
 INSTALLED_APPS = (
   'south',
   'my_db_app',)
 ...

Create south table in the new db

 ./manage.py syncdb

Now you can work in this project to manage your apps related to this new db

 manage.py convert_to_south my_db_app

on other computers

 manage.py migrate my_db_app 0001 --fake

modify models.py

 manage.py schemamigration my_db_app --auto
 manage.py migrate my_db_app

As you can see, this way you keep the standard South workflow !

Edit: I use this line in the main project's settings.py in order to be able to launch tests:

 SOUTH_TESTS_MIGRATE = False