私はdjangoプロジェクトを書いています。そして、ユーザーが自分のアカウントを削除した後に知りたいのであれば、このユーザーに関連するすべてのオブジェクトを自動的に削除する方法はありますか(例えば、いくつかの一般的なforeign_key)?あるいは、関連するすべてのオブジェクトを削除するために "post_delete"というシグナルを使うべきですか?Djangoユーザーのプロファイルと投稿を削除する方法と、ユーザーが削除した後にすべてのアサーションを削除する方法はありますか?
答えて
Djangoはオブジェクトを削除すると、デフォルトでSQL DELETE CASCADEの動作をエミュレートします。つまり、削除対象のオブジェクトを指す外部キーを持つオブジェクトはすべて削除されます。
https://docs.djangoproject.com/en/dev/topics/db/queries/#deleting-objects
b = Blog.objects.get(pk=1)
# This will delete the Blog and all of its Entry objects.
b.delete()
ありがとうございます! – Xinghan
あなたは、元のオブジェクトを削除する前に、明示的に元のオブジェクトへの一般的な外部キー参照をすべて削除する必要があります。それはモデルで1対1の関係のために、例えば、動作しますが、一般的な外部キーの関係のために動作するようには思えないとき例えば
Image.objects.filter(object_id=object_to_be_deleted.id,content_type = ContentType.objects.get_for_model(bject_to_be_deleted.get_profile())).delete()
object_to_be_deleted.delete()
カスケード削除は素晴らしいです。
ありがとうございました! – Xinghan
私はあなたの推薦に同意しますが、「一般的な外部キー関係では機能しないようです」という文章は、これが通常の場合ではないため、さらに説明が必要です。 – Wtower
@Wtowerこれは2012年にも当てはまりましたが(Django 1.4?)、ドキュメンテーション(https://docs.djangoproject.com/en/1.8/ref/contrib/contenttypes/#reverse-generic-relations) GenericRelationを持つオブジェクトを削除すると、それを指すGenericForeignKeyを持つオブジェクトも削除されます。これはDjango 1.7の変更であった可能性があります。 –
外部キーが破損するため、Djangoはユーザーを削除しないことをおすすめします。この理由から、is_activeメソッドが含まれています。
https://docs.djangoproject.com/en/1.3/topics/auth/#django.contrib.auth.models.User.is_active
- 1. 削除ボタンを使用してユーザー投稿を削除する
- 2. ユーザーが削除されたときにゲームを削除する
- 3. ユーザーがテキストボックス内のテキストを削除したときにchecboxをオフにする方法はありますか?
- 4. ユーザーがiOSアプリケーションを削除した後にローカルデータを保存する方法は?
- 5. ユーザーが削除した集計を再表示する方法
- 6. 削除ボタンを押したときにUITableView行を削除する方法は?
- 7. レコードが削除されたときにファイルを削除する方法は?
- 8. イベントの削除asp.net;投稿が削除されたかどうかを確認する方法
- 9. OOP - 投稿を削除する必要がありますか?
- 10. モデルを削除した後の関連付けを削除する方法
- 11. Google Analytics - Cookieを削除した後にGAがユーザーを追跡する方法
- 12. UITableViewCellスワイプを削除してバウンスを削除する方法
- 13. ユーザーがFacebookからアプリを削除したときを検出する方法
- 14. djangoでプロジェクトを削除する方法
- 15. -WP Multisite-ブログを削除したときにもプラグインデータベーステーブルを削除する方法
- 16. CakePHPは:ユーザーを削除すると、私は、ユーザーを削除できるようにしたいbelongsToの
- 17. djangoの多対多リレーションシップ:アイテムを削除する方法はありますが、関連するモデルから削除する方法はありません
- 18. コンテンツデータベース内のエントリを削除するときにリストアイテムを削除する方法
- 19. sqlalchemyでカスケードのIDを削除(または削除用にマーク)する方法はありますか?
- 20. Linuxユーザーを削除するとパスワードも削除されますか?
- 21. ヘッダーのWordPressフィードURLを削除/削除する方法は?
- 22. アプリケーションからQuickBloxユーザー・タグを削除する方法は?
- 23. herokuのブランチを削除する方法はありますか
- 24. モバイルタッチデバイスのクリックラグを削除する方法はありますか?
- 25. クラスを追加して削除する方法と、JqueryでCookieを設定して削除する方法を
- 26. すべてのiPhoneアプリケーションデータを削除する方法はありますか?
- 27. 角度サービス(投稿、取得、削除)を開始する方法
- 28. jquery(投稿フォーム)でオブジェクト/行を削除する方法
- 29. ファイル名を削除する方法と、すべてのファイル名を削除する方法はありますか?
- 30. ユーザーとユーザープロファイルの削除
を参照してください。あなたは、関連するオブジェクトがすでに削除されていませんか? IntegrityErrorを避けるためにnullを許可しないForeignKeysを削除する必要があり、デフォルトでIIRC Djangoがそうするでしょう。一般的な外部キーによって、あなたは[GenericForeignKey](https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#django.contrib.contenttypes.generic.GenericForeignKey)を具体的に意味しますか?それはより複雑になるからです。 – AdamKG
@AdamKGここで特にGenericForeignKeyを意味するわけではないと思います。私が意味するのは、私がすでに答えを得ているON DELETE CASCADEです。私は、Contenttypeの間、GenericForeignKeyが何をしているのか、私が勉強していることを明確に理解していません。これとは関係のない別の質問ですが、私はいくつかのユーザープロファイルの実装を見つけました。彼らはすべてOneToOneではなくForeignKeyを使用しています。彼らはここで多対1の関係を取っていると考えていますか、それとも重要ではありません。 – Xinghan