Это зависит от типа синхронизации ... например:
В идеале вы должны учитывать размер файлов, которые вы получаете + количество времени, которое вы тратите, используя их.
Чтобы ответить на ваш первый вопрос, простое переименование модели / таблицы довольно просто.Выполните команду:
./manage.py schemamigration yourapp rename_foo_to_bar --empty
(Обновление 2: попробуйте - auto
вместо - empty
, чтобы избежать предупреждения ниже. Спасибо @KFB за подсказку.)
Если вы используете старую версию south, вам понадобится startmigration
вместо schemamigration
.
Затем вручную отредактируйте файл миграции, чтобы он выглядел следующим образом:
class Migration(SchemaMigration):
def forwards(self, orm):
db.rename_table('yourapp_foo', 'yourapp_bar')
def backwards(self, orm):
db.rename_table('yourapp_bar','yourapp_foo')
Вы можете сделать это проще, используя db_table
Meta-опцию в вашем классе модели. Но каждый раз, когда вы это делаете, вы увеличиваете унаследованный вес своей кодовой базы - если имена классов отличаются от имен таблиц, ваш код сложнее понимать и поддерживать. Я полностью поддерживаю такие простые рефакторинги для ясности.
(обновление) Я только что попробовал это в производственной среде и получил странное предупреждение, когда пошел применить миграцию. Он сказал:
Следующие типы контента устарели и должны быть удалены: yourapp | фу Любые объекты, связанные с этими типами содержимого внешним ключом, также будут быть удаленным. Вы действительно хотите удалить эти типы контента? Если вы не уверены, ответьте «нет».
Я ответил «нет», и вроде все было хорошо.
Юг не может этого сделать сам - откуда он знает, что Бар
представляет то, что раньше Foo
? Я бы написал для этого индивидуальную миграцию. Вы можете изменить свой ForeignKey
в коде, как вы это делали выше, а затем это просто случай переименования соответствующих полей и таблиц, что вы можете делать как хотите.
Наконец, действительно ли вам это нужно? Мне еще не нужно было переименовывать модели - имена моделей - это всего лишь деталь реализации - особенно с учетом доступности мета-опции verbose_name
.