我正在写一个 Django 项目。并且想知道用户删除他自己的帐户后,有没有办法 django 内置自动删除与该用户相关的所有对象(例如一些通用的外键)?或者我应该使用信号“post_delete”来删除所有相关的对象?
问问题
12833 次
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()
级联删除在工作时非常有用,例如,对于模型中的一对一关系,但它似乎不适用于通用外键关系。
于 2012-01-25T23:03:00.973 回答