Внесите изменения в models.py
и затем запустите
./manage.py schemamigration --auto myapp
При проверке файла миграции вы увидите, что он удаляет таблицу и создает новую
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting model 'Foo'
db.delete_table('myapp_foo')
# Adding model 'Bar'
db.create_table('myapp_bar', (
...
))
db.send_create_signal('myapp', ['Bar'])
def backwards(self, orm):
...
Это не совсем то, что вы хотите. Вместо этого отредактируйте миграцию так, чтобы она выглядела так:
class Migration(SchemaMigration):
def forwards(self, orm):
# Renaming model from 'Foo' to 'Bar'
db.rename_table('myapp_foo', 'myapp_bar')
if not db.dry_run:
orm['contenttypes.contenttype'].objects.filter(
app_label='myapp', model='foo').update(model='bar')
def backwards(self, orm):
# Renaming model from 'Bar' to 'Foo'
db.rename_table('myapp_bar', 'myapp_foo')
if not db.dry_run:
orm['contenttypes.contenttype'].objects.filter(app_label='myapp', model='bar').update(model='foo')
В отсутствие оператора update
вызов db.send_create_signal
создаст новый ContentType
с новым именем модели. Но лучше просто update
ContentType
, который у вас уже есть, на случай, если на него указывают объекты базы данных (например, через GenericForeignKey
).
Кроме того, если вы переименовали некоторые столбцы, которые являются внешними ключами для переименованной модели, не забудьте
db.rename_column(myapp_model, foo_id, bar_id)