The autodetector is the part of South you’ll probably be using the most, as well as being the feature that people seem to like the most.
The general use of the autodetector is covered in Part 1: The Basics; this is more of a reference of what it’s capable of.
When the autodetector runs, it compares your current models with those frozen in your most recent migration on the app, and if it finds any changes, yields one or more Actions to the South migration-file-writer.
Model creation and deletion¶
South will happily detect the creation and deletion of models; this is the oldest and most well-worn feature of the autodetector, and so has very few caveats.
One thing to note is that, while South calls the post_syncdb hook on your
models (much like
syncdb does), it calls it when it initially creates the
table, not at the end of the migration, so your hook might well get called
when the model doesn’t have its full table.
Consider moving your hook code into its own data migration, or use one of our own Signals.
Field addition and removal¶
South detects addition and removal of fields fine, and should correctly create indexes and constraints for new fields.
Note that when you add or remove a field, you need a default specified; there’s more explanation on this in the Defaults part of the tutorial.
South will detect if you change a field, and should correctly change the field type, with one exception:
- If you alter to a field with a CHECK constraint (e.g.
PositiveIntegerField) the constraint won’t be added to the column (it is removed if you alter away, however). This will be fixed in a future release.
ManyToMany addition and removal¶
ManyToMany fields are detected on addition and removal; when you add the field, South will create the table the ManyToMany represents, and when you remove the field, the table will be deleted.
The one exception to this is when you have a ‘through model’ (i.e. you’re using
through= option) - since the table for the model is already created when
the model is detected, South does nothing with these types of ManyToMany fields.
If you change the
unique= attribute on a field, or the
in a model’s Meta, South will detect and change the constraints on the database
accordingly (except on SQLite, where we don’t yet have the code to edit UNIQUE
Multicolumn index changes¶
Django 1.5 introduced
index_together in a model’s Meta, allowing you to
specify multicolumn indexes. South will detect and change the indexes on the