For the wild cricket tales project I’m using django again, the all new 1.7 version which has amongst lots of other shiny things has an all new migrations system. This is so you can change the underlying database ‘model’ for your site and it automatically tracks your changes and applies them to the data (via python scripts it generates and you can tweak if needed).
However, if you trash them (my 0001_initial.py was deleted – not sure what by, or why I didn’t have them in version control but that’s another question) it’s helpful to know how to start again from scratch – the official documentation doesn’t have much to say on this topic yet. This is what I cobbled together, and it requires that your current database matches the code state exactly:
Delete all existing migrations:
Remove references to them from the database – presumably you need to be a little more selective here if you are running more than one app:
sqlite3 db.sqlite3 "delete from django_migrations"
Create new starting state:
python manage.py makemigrations --empty my-app
Fake the initial migration – this will leave the migrations system assuming that the current database state match the code but won’t actually apply the changes (i.e. making the tables again):
python manage.py migrate --fake
I’m still a little unclear how migrations in source control work across development/production servers etc, but time will tell…