Как правильно переименовать внешний ключ в django-south - PullRequest
3 голосов
/ 05 марта 2012

Мне нужно переименовать внешний ключ в моей модели django, используя миграцию на юг. Я подумал, что мне повезло, когда я нашел эту тему Как переименовать поле постороннего ключа с помощью South? Однако все описанные там методы не работают с различными ошибками. Кто-то на самом деле знает правильный способ сделать это?

Я хочу переименовать SomeModel.registered_to = models.ForeignKey( User ) в SomeModel.owner = models.ForeignKey( User ) и сохранить связь между User и owner. Любая помощь будет признательна!

1 Ответ

3 голосов
/ 05 марта 2012

Измените имя поля и запустите python manage.py schemamigration --auto yourapp. Юг добавит код для удаления столбца и добавит новый. Разрешение South генерировать миграцию гарантирует, что ORM заморожен должным образом, поэтому все, что вам нужно сделать, это просто изменить фактическую миграцию на переименование, а не удаление и добавление. Просто удалите эти строки из прямой и обратной миграции и замените их на:

def forwards(self, orm):
    db.rename_column('yourapp_yourmodel', 'registered_to_id', 'owner_id')

def backwards(self, orm):
    db.rename_column('yourapp_yourmodel', 'owner_id', 'registered_to_id')

Сохраните, а затем перенесите ваше приложение.

...