Как написать миграцию для изменения первичного ключа модели с ManyToManyField
у меня естьUserProfile
модель, которая относится к моемуUser
модель сOneToOneField
, Я также используюpost_save
сигнал для автоматического созданияUserProfile
когда пользователь создан. Это прекрасно работает помимо создания пользователя через администратора (где я использую встроенный), когда я получаю сообщение об ошибке дублирующего профиля.В этом ответе рекомендуется установить первичный ключ как OneToOneField со ссылкой на пользователя..
Итак, прежде чем:
class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
# ...
subjects = models.ManyToManyField(Subject, null=True, blank=True)
После
class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key=True)
# ...
subjects = models.ManyToManyField(Subject, null=True, blank=True)
Я пытаюсь сделать это с помощью миграций в Django 1.7, но жизнь усложняется тем, что в профиле есть рядManyToManyField
- так что все они относятся кid
полеUserProfile
модель. С помощьюmakemigrations
создает миграции для того, чтобы сделать пользователя первичным ключом и удалить старое поле id, но игнорирует ManyToManyField.
В настоящее время я иду по кроличьей норе, используя многоRunSQL
заявления в миграции, чтобы изменить сквозную таблицу дляManyToManyField
, Я только что натолкнулся на другую ошибку, когда имя ограничения не совпадает в одной таблице с другой.
Итак, мой вопрос: есть ли в миграциях Django метод, который будет выполнять работу по изменению сквозной таблицы, чтобы она ссылалась на новый первичный ключ, обновляя все ограничения, ключи и т. Д.? Если нет, как лучше всего справиться с этой ситуацией?
Я использую Django 1.7 с MySQL.