How does django know which migrations have been run?
If it is django1.7, it stores history to database, table django_migrations.
South also stores migrations in database, and you can enable feature to show migration history in django admin.
How does django know whether a migration has been applied yet? It usually gets it right, but when it doesn't I don't ever know where to start troubleshooting.