Как добавить одно-одно поле отношения в существующей модели с помощью миграции на юг - PullRequest
7 голосов
/ 21 декабря 2011

У меня уже есть модель,

class ModelA( models.Model ):
    name = models.CharField ( max_length = 255, blank = False )

и у меня много записей. Теперь я хочу добавить в него поле,

user = models.OneToOneField( User )

Как мне добавить это поле в ModelA? Есть ли какое-либо решение, кроме удаления всех предыдущих записей?

1 Ответ

12 голосов
/ 21 декабря 2011

Я бы использовал этот шаблон:

  1. Добавьте «user = models.OneToOneField (User, null = True)» в вашу модель (не удаляйте поле «name»)
  2. запустите 'manage.py schemamigration --auto'.И применить миграцию.Теперь в вашей таблице два столбца.
  3. Теперь создайте миграцию данных.Отредактируйте файл: вам нужно перебрать все объекты в вашей модели и установить поле пользователя.
  4. Удалите «name = models.CharField» из файла model.py.И удалите null = True из пользовательского поля.
  5. запустите 'manage.py schemamigration --auto'.И примените миграцию

Кстати, если вы используете OneToOneField () без null = True, вы можете установить primary_key = True в этом поле, поскольку оно должно быть уникальным.Но я не знаю, сможет ли юг справиться с этой миграцией.

...