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

时间:2012-01-25 22:51:07

标签: django django-models django-users

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

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:7)

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

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

答案 2 :(得分: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()

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