BaseDatabaseSchemaEditor.alter_field(model, old_field, new_field, strict=False)
[source]
This transforms the field on the model from the old field to the new one. This includes changing the name of the column (the db_column
attribute), changing the type of the field (if the field class changes), changing the NULL
status of the field, adding or removing field-only unique constraints and indexes, changing primary key, and changing the destination of ForeignKey
constraints.
The most common transformation this cannot do is transforming a ManyToManyField
into a normal Field or vice-versa; Django cannot do this without losing data, and so it will refuse to do it. Instead, remove_field()
and add_field()
should be called separately.
If the database has the supports_combined_alters
, Django will try and do as many of these in a single database call as possible; otherwise, it will issue a separate ALTER statement for each change, but will not issue ALTERs where no change is required (as South often did).
Please login to continue.