I’m using South to generate and apply migrations, rather than managing that myself. Unfortunately, South is refusing to actually do anything. Transcript below:
[graffias:~/testing.tustincommercial.com/oneclickcos]$ python ./manage.py schemamigration mainapp --auto
You cannot use --auto on an app with no migrations. Try --initial.
[graffias:~/testing.tustincommercial.com/oneclickcos]$ python ./manage.py schemamigration mainapp --initial
+ Added model mainapp.CompanyUK
+ Added model mainapp.CompanyName
+ Added model mainapp.Individual
+ Added model mainapp.Director
+ Added model mainapp.DirectorsIndividual
+ Added model mainapp.DirectorsCorporate
+ Added model mainapp.ShareCapitalClass
+ Added model mainapp.Member
+ Added model mainapp.MembersIndividual
+ Added model mainapp.MemberGeneric
+ Added model mainapp.CompanyManager
+ Added model mainapp.PendingRegistration
+ Added model mainapp.PendingAuthorisation
Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate mainapp
[graffias:~/testing.tustincommercial.com/oneclickcos]$ python ./manage.py migrate mainapp
Running migrations for mainapp:
- Nothing to migrate.
- Loading initial data for mainapp.
No fixtures found.
[graffias:~/testing.tustincommercial.com/oneclickcos]$
As you can see, South thinks there is nothing to do. However, the last three models are completely new, and have no table in the database.
Is there anything I can do, short of zapping the database to get South working again?
I have no intention of manually writing migrations for the rest of the project, but if it would help, I would write one migration.
From the department of dirty hacks:
This process solved my problem, but it is hardly elegant.
(1) Remove all migrations in the affected app (
rm mainapp/migrations/*)(2) Remove your models.py, and replace it with an empty file (
mv mainapp/models.py .; rm mainapp/*.pyc; touch mainapp/models.py)(3) Generate an initial migration that does nothing (
python ./manage.py schemamigration mainapp --initial), and apply it (python ./manage.py migrate mainapp)(4) Restore ones models, and generate a migration which which will recreate everything (
rm mainapp/models.py; mv models.py mainapp/; python ./manage.py schemamigration mainapp --auto)(5) BEFORE running the new migration, edit it to comment out all the changes that are not really new changes. Alternatively, run it, and have it fail on the tables that actually exist, then comment out everything.
(6) Apply your migration to put south into something like a normal state (and perform your changes if you followed my recommended course in step (5):
python ./manage.py migrate mainapp)Better and cleaner suggestions are welcome, as are any indications of what else this approach might break.