我可以在 Django 中覆盖 User.objects.delete 吗?

Can I overwrite User.objects.delete in Django?

我以前是在有用户的时候删除用户,但是很多模型涉及到用户,我需要设置相关的外键为空或者删除。

但有些模型会因为相关用户被删除而没有意义,例如Order。因此我需要设置 User.is_active 或类似无效的东西而不是删除数据。

我觉得如果能覆盖User.objects.delete就最好了,不需要修改很多相关的业务功能

django.contrib.auth.User 已经有一个 is_active 参数,因此您可以直接设置它。

事实上,从上面链接的文档:

We recommend that you set this flag to False instead of deleting accounts; that way, if your applications have any foreign keys to users, the foreign keys won’t break.

是的,从技术上讲,您可以通过设置新的管理器来覆盖 delete,但这是错误的方法。