9

私はdjangoプロジェクトを書いています。ユーザーが自分のアカウントを削除した後に知りたいのですが、このユーザーに関連するすべてのオブジェクト(たとえば、いくつかの一般的なforeign_key)を自動削除するdjango組み込みの方法はありますか? または、信号「post_delete」を使用して、関連するすべてのオブジェクトを削除する必要がありますか?

4

3 に答える 3

13

Django がオブジェクトを削除するとき、デフォルトでは、SQL 制約 ON 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()
于 2012-01-25T23:01:29.243 に答える
7

外部キーが壊れるので、Djangoはユーザーを削除しないことをお勧めします。is_activeメソッドが含まれているのはこのためです。

https://docs.djangoproject.com/en/1.3/topics/auth/#django.contrib.auth.models.User.is_activeを参照してください

于 2012-01-25T23:16:23.250 に答える
5

元のオブジェクトを削除する前に、元のオブジェクトへの汎用外部キー参照をすべて明示的に削除する必要があります。例えば

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()

カスケード削除は、たとえばモデル内の 1 対 1 の関係では機能する場合に優れていますが、一般的な外部キーの関係では機能しないようです。

于 2012-01-25T23:03:00.973 に答える