2

UserDjango アプリでオブジェクトを削除しようとしていますがIntegrityErrorUser. 関連オブジェクトは次のようになります。

class Unfollowing(models.Model):
    source = models.ForeignKey(User, related_name='unfollowings_by')
    target = models.ForeignKey(User, related_name='unfollowings_of')
    created_on = models.DateTimeField(auto_now_add=True)

しかし、を削除するUserと、次のようなエラーが発生します。

IntegrityError: テーブル "auth_user" の更新または削除は、テーブル "core_unfollowing" の外部キー制約 "source_id_refs_id_5b69e09fc6161c2a" に違反しています

どうしたんだ?Unfollowing関連オブジェクトが削除されると、関連オブジェクトは自動的に削除されるべきではありませんUserか? 価値があるのは、明示的なon_delete=models.CASCADEものを両方に追加しUnfollowing.sourceUnfollowing.target(それがデフォルトであっても)、それでも同じエラーが発生することです。

4

1 に答える 1

2

それは確かに奇妙です。ここに私が試すいくつかのことがあります:

まず、? を追加した後にデータベース スキーマを更新しましたon_delete=models.CASCADEか。そうでないと何の効果もありません。ON DELETE CASCADEDjango からではなく、データベース スキーマを直接ダンプすることで、 がアクティブ化されているかどうかを再確認できます。

これは、Django よりも db エンジン関連のエラーのようです。ON DELETE CASCADEauth_user テーブルと関連するテーブルで100% 有効になっていることが確実な場合は、SQL クライアントから直接ユーザーを削除してみてください。それが機能し、同じユーザーが Django (または最初のユーザーを消去したという事実を考えると、同様のユーザー) から問題を引き起こした場合は、Django が実行している SQL クエリをダンプして、SQL クライアントから繰り返します。

これが私がとるアプローチです。また、これが特定のユーザーまたはすべてのユーザーで発生するかどうかを確認し、Unfollowing テーブルでぶら下がっている参照を確認します。たぶん、あなたが持っていた古いテーブルが存在し、それが問題を引き起こしているのかもしれません。

データベースと SQL クライアントを直接調査し、そこで動作するようになったら、Django に戻ります。

これは非常に具体的な問題のように思われるため、答えというよりも私がたどる道です。

これが少し役立つことを願っています。

幸運を!

于 2013-06-22T04:13:33.730 に答える