Django如何在用户删除后删除用户的个人资料和帖子以及所有关联?

Xin*_*han 9 django django-models django-users

我正在写一个django项目.并且想知道用户删除自己的帐户后,有没有办法django内置自动删除与该用户相关的所有对象(例如一些通用的foreign_key)?或者我应该使用信号"post_delete"来删除每个相关的对象?

Pri*_*shj 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()
Run Code Online (Sandbox Code Playgroud)


jdi*_*son 7

Django建议不要删除用户,因为外键会中断.出于这个原因,它们包含了is_active方法.

请参阅https://docs.djangoproject.com/en/1.3/topics/auth/#django.contrib.auth.models.User.is_active


Mar*_*ian 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()
Run Code Online (Sandbox Code Playgroud)

级联删除很有用,例如,对于模型中的一对一关系,但它似乎不适用于通用外键关系.