无法使用外键约束迁移Django模型

时间:2015-03-22 14:49:05

标签: django django-migrations

我有一个带有外键字段的模型。我想删除外键引用。但是,由于以下错误,迁移失败:

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

我理解正在发生什么,但我不知道如何使用Django正确解决这个问题。现在(因为我在我的项目的开始),我手动进入MySQL数据库并删除表并重新迁移,就像它是第一次迁移一样。

有没有办法,使用Django来解决这个外键约束问题?

<小时/> 我正在使用Django 1.7
数据库后端是MySQL

编辑 - 迁移之前/之后的模型

之前

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模型中删除了“Plural”。 makemigrations命令工作正常,但migrate命令失败并出现上述错误。


编辑2

遇到同样的错误:

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

这次我从模型skill

中删除了字段Project

1 个答案:

答案 0 :(得分:0)

我用过的小黑客:

  • 添加一个迁移操作,首先在其他操作之前将字段改为IntegerField,即

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