Changing the field name while keeping the DB field
Adding an answer for Django 1.8+ (with Django-native migrations, rather than South).
Make a migration that first adds a db_column property, and then renames the field. Django understands that the first is a no-op (because it changes the db_column to stay the same), and that the second is a no-op (because it makes no schema changes). I actually examined the log to see that there were no schema changes…
operations = [
migrations.AlterField(
model_name="mymodel",
name="oldname",
field=models.BooleanField(default=False, db_column=b'oldname'),
),
migrations.RenameField(
model_name="mymodel",
old_name="oldname",
new_name="newname",
),
]