Version 1 (modified by andrew, 7 years ago) (diff)



South 0.4 and up

alter_column(table_name, column_name, field, explicit_name=True)

Alters the column column_name on the table table_name to match field. Note that this cannot alter all field attributes; for example, if you want to make a field unique=True, you should instead use db.add_index? with unique=True, and if you want to make it a primary key, you should look into db.drop_primary_key? and db.create_primary_key?.

If explicit_name is false, ForeignKey? fields will have _id appended to the end of the given column name - this lets you address fields as they are represented in the model itself, rather than as the column name.


A simple change of the length of a VARCHAR column:

# Assume the table was created with name = models.CharField(max_length=50)
alter_column('core_nation', 'name', models.CharField(max_length=200))

We can also change it to a compatible field type:

alter_column('core_nation', 'name', models.TextField())

If we have a ForeignKey? named 'user', we can address it without the implicit '_id' on the end:

alter_column('core_profile', 'user', models.ForeignKey(orm['auth.User'], null=True, blank=True), explicit_name=False)

Or you can specify the same operation with an explicit name:

alter_column('core_profile', 'user_id', models.ForeignKey(orm['auth.User'], null=True, blank=True))