2015-03-22 4 views
2

У меня есть модель с полем внешнего ключа. Я хочу удалить ссылку на внешний ключ. Однако миграция не удается из-за следующей ошибки:Не удается перенести модели Django с ограничениями внешнего ключа

Cannot delete or update a parent row: a foreign key constraint fails 

Я понимаю, что это происходит, но я не знаю, как решить эту проблему должным образом с Django. Прямо сейчас (так как я нахожусь в начале моего проекта), я вхожу в базу данных MySQL вручную и удаляю таблицы и перенаправляю, как если бы это была первая миграция.

Есть ли способ, используя Django, преодолеть эту проблему ограничения внешнего ключа?


Я использую Django 1.7
серверной базы данных является MySQL

EDIT - Модели До/После миграции

Перед:

class Skills(models.Model): 
    # fields here... 

class Project(models.Model): 
    skills = models.ForeignKey(Skills, verbose_name = "Required Skills", blank = True, null = True) 

После:

class Skill(models.Model): 
    # fields here... 

class Project(models.Model): 
    skills = models.ForeignKey(Skill, verbose_name = "Required Skills", blank = True, null = True) 

Я уверен, что все, что я сделал это снял «Множественные» от Skill модели. Команда makemigrations работает нормально, но команда migrate не работает с указанной выше ошибкой.


EDIT 2

Хит ту же ошибку:

Cannot drop column 'skills_id': needed in a foreign key constraint 'projects_project_skills_id_4cc7e00883ac4de2_fk_projects_skill_id' 

На этот раз я упал поле skill от модели Project

+0

Это ошибка, которую вы можете ожидать, когда вы удаляете или обновление строки; а не при изменении схемы базы данных. Можете ли вы разместить свои модели (до и после миграции)? – Selcuk

ответ

0

Немного халтуры я использовал:

  • Добавить миграционные операции, первый исказит поле сказать IntegerField перед другими операциями т.е.

operations = [ migrations.AlterField( model_name='projects_project', name='skills', field=models.IntegerField(default=0) ), ..... other migration entries now after this. ]

Смежные вопросы