3

我最近从原始 php 移植到 django,并且不得不将我的旧数据库合并到其中。我使用该inspectdb命令从数据库中构建模型,一切正常。

最近我决定添加likeand的功能set to favorite。所以我添加了一个新表,如下所示。

class SongCollection(models.Model):
    song_name = models.TextField()
    song_type = models.CharField(max_length=765)
    likes = models.IntegerField(default=0)

    class Meta:
        db_table = u'songcollection'


class likeSong(models.Model):

    user = models.ForeignKey(User)
    company = models.ForeignKey(SongCollection)

第一个是我的原创class,另一个是用于存储哪个用户喜欢哪首歌。我正在使用完全开发的其他应用程序中的确切结构,django并且它们工作正常。但是,当我尝试向其中添加对象时,likeSong出现以下错误。

Cannot add or update a child row: a foreign key constraint fails

我也尝试从 MySql 命令行添加这个对象,以检查这是否是一个Django错误,但在那里也失败了。任何人都可以帮助我理解这里到底出了什么问题吗?

4

2 回答 2

8

我已经弄清楚了问题所在,正如我所说的,我已将其转储legacy database到我的新django项目中。旧表是使用创建的phpMyAdmin,表的存储引擎类型是,MyISAM但是我的 django 创建的新表的存储类型是innodb.

结果,两个表之间不兼容,每当我在较新的表中添加元组时,外键约束失败,因为它没有在引用的表中找到等效的对象,因为引用的表没有相同的存储引擎.

我将旧表的存储引擎更改为innodb,现在它工作正常。我用这个命令来改变

ALTER TABLE ourquestions ENGINE = innodb

希望它可以帮助某人。

于 2012-01-14T06:34:25.740 回答
1

当您要删除、更新或更改数据库中与另一个表有关系的表时,会发生此错误。在这种情况下,您必须在主表(主表)中进行更改,然后在第二个表中更改您的记录。

见鬼你的数据库表和关系。

请告诉我结果

于 2012-01-10T11:22:25.247 回答