3

私は最近、生の php から django に移植し、レガシー データベースをそれに組み込む必要がありました。コマンドを使用しinspectdbてデータベースからモデルを構築したところ、すべて正常に機能していました。

最近、likeとの機能を追加することにしました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)

1つは私のオリジナルclassで、もう1つはどのユーザーがどの曲を気に入ったかを保存するためのものです。で完全に開発された他のアプリケーションのように、正確な構造を使用しており、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た。

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

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

ALTER TABLE ourquestions ENGINE = innodb

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

于 2012-01-14T06:34:25.740 に答える
1

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

あなたのデータベーステーブルと関係をチェックしてください。

結果教えてください

于 2012-01-10T11:22:25.247 に答える