我正在写一个django项目。并且想知道用户删除自己的帐户后,有没有办法django内置自动删除与该用户相关的所有对象(例如一些通用的foreign_key)?或者我应该使用信号“post_delete”来删除每个相关的对象?
答案 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()
级联删除很有用,例如,对于模型中的一对一关系,但它似乎不适用于通用外键关系。