2015-03-06 2 views
2

В моей модели Django У меня было поле, как этот (упрощенно):Джанго сбой миграции на изменение to_field

category = models.ForeignKey(EnumValue, to_field='code', related_name='+', verbose_name="Kategorie", db_column='Kategorie') 

Затем я удалил to_field аргумент, чтобы преобразовать внешний ключ к одному, что указывает на основной ключ.

Миграция Django создала простой AlterField для этого изменения и, похоже, не изменяет внешний ключ или не корректно переводит существующие данные. В любом случае, я получаю сообщение об ошибке, при применении миграции:

pymysql.err.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails 

Я не могу найти ничего об этом конкретном случае, в Интернете. Я бы сказал, что это ошибка миграции Django. Вы согласны? Знаете ли вы обходное решение для этого?

+0

Что произойдет, если вы удалите связанное имя = '+'? Похоже, это помешало бы FK указывать на PK родительской модели. Кроме того, похоже, что ошибка была усечена - она ​​должна сказать, какие столбцы потерпели неудачу, что было бы полезно. – Charlie

+0

Вы смогли это решить? Я столкнулся с той же проблемой. В postgres недопустимы недопустимые ограничения (по-прежнему указывайте на старое поле, на которое делается ссылка). – Salvia

+0

@ Salvia: Я ответил на мой вопрос, пожалуйста, смотрите ниже. –

ответ

0

Следующая работал для меня:

  1. Добавить второе поле, которое указывает на первичный ключ ссылочного класса.
  2. В файле миграции добавьте подпрограмму python, которая передает ссылки из существующего поля в новое поле.
  3. Во второй миграции удалите старое поле и переименуйте новый.
Смежные вопросы