Django迁移中的“无法添加外键约束”

时间:2019-09-05 10:08:29

标签: mysql django

我尝试添加1:n关系,但是无法添加外键约束。

class PlatformEnv(models.Model):
    id = models.AutoField(db_column='ID', primary_key=True)
    tag_type = models.ForeignKey(Tagtypes, models.DO_NOTHING, db_column='Tag_Type', blank=True, null=True)

class Tagtypes(models.Model):
   name = models.CharField(max_length=50, blank=True, null=True)

这是生成的迁移:

migrations.AddField(
    model_name='platformenv',
    name='tag_type',
    field=models.ForeignKey(blank=True, db_column='Tag_Type', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='polls.Tagtypes'),
),

数据库显示以下错误:

Error in foreign key constraint of table adtech_mandators/#sql-5de0_4cf61_130:
 FOREIGN KEY (`Tag_Type`) REFERENCES `TagTypes` (`id`):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.

表格:

CREATE TABLE `TagTypes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

CREATE TABLE `PlatformEnv` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Tag_Type` int(11) DEFAULT NULL,
  PRIMARY KEY (`ID`),
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;

1 个答案:

答案 0 :(得分:1)

更改:

tag_type = models.ForeignKey(Tagtypes, models.DO_NOTHING, db_column='Tag_Type', blank=True, null=True)

收件人:

tag_type = models.ForeignKey(Tagtypes, models.DO_NOTHING, blank=True, null=True)

错误提示:

  

表adtech_mandators /#sql-5de0_4cf61_130的外键约束中的错误:    外键(Tag_Type)参考TagTypesid):

您正在尝试引用不存在的名为Tag_Type的列。正确的名称是TagTypes,这是默认名称,不需要在外键选项中指定。

相关问题