2012-01-10 20 views
3

最近、raw phpからdjangoに移植され、レガシーデータベースを組み込む必要がありました。私はinspectdbコマンドを使用してデータベースからモデルを構築し、すべて正常に動作していました。エラーが発生しました - 子行を追加または更新できません:djangoのレガシーデータベースで外部キー制約が失敗しました

最近、likeset 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 

私は、これはDjangoエラーだったが、それはまた、そこに失敗したかどうかを確認するためには、同様にmysqlコマンドラインからこのオブジェクトを追加しようとしました。誰でも実際にここで間違っていることを理解するのを助けることができますか?

答えて

8

を教えてください。古いテーブルはphpMyAdminを使用して作成され、テーブルのストレージエンジンタイプはMyISAMでしたが、新しいテーブルが作成された私のdjangoのストレージタイプはinnodbでした。

結果として、2つのテーブルの間に互換性がなくなり、新しいテーブルにタプルを追加するたびに、参照されたテーブルに同等のオブジェクトが見つからなかったため、外部キー制約が失敗しました同じストレージエンジン。

古いテーブルのストレージエンジンをinnodbに変更しましたが、正常に動作しています。私はこのコマンドを使用して変更しました

ALTER TABLE ourquestions ENGINE = innodb 

誰かに役立つことを願っています。

+0

ありがとう、あなたは最高です! – Ron

1

このエラーは、データベース内の別のテーブルとの関係を持つテーブルを削除、更新、または変更する場合に発生します。この場合、メインテーブル(プライマリ)で変更を加えてから、2番目のテーブルのレコードを変更する必要があります。

あなたのdatabseテーブルとリレーションシップ。

私は私が私の新しいdjangoプロジェクトにlegacy databaseを投棄したと述べたように私は、問題が何であるかを考え出した私の結果

+0

私の 'like'ロジックは次のようなものです:ユーザーがその曲のlikeボタンをクリックすると、ユーザーに1つの曲と1つの曲に2つの外部キーがある' likeSong'テーブルにエントリが作成されます。私は 'foreign-key'で参照されるテーブルを変更していません。他のモデルでも同じことができますが、基本的にはレガシーデータベースであるこのモデルでは失敗します。 – Sachin

関連する問題