我正在使用 Django 2.2
在我的应用程序中,有一个共享用户功能,并且每个共享用户都被添加到 User 模型中,并且is_shared
字段设置为 True 。
共享用户链接到 SharedUser 模型之类的用户,例如
class SharedUser(models.Model)
user = models.ForeignKey(User, on_delete=models.CASCASE, related_name='owner_user')
shared_user = models.ForeignKey(User, on_delete=models.CASCASE, related_name='shared_user')
从 SharedUser 模型删除记录时,我还必须从 User 模型中删除链接的shared_user
记录。为此,我使用的是post_signal
接收器。
receivers.py
@receiver(post_delete, sender=SharedUser, dispatch_uid='post_delete_shared_user')
def post_delete_shared_user(sender, instance, *args, **kwargs):
try:
if instance and instance.shared_user:
owner = instance.user
instance.shared_user.delete()
except:
pass
,然后将接收器加载到 app.py 配置
class SharedUsersConfig(AppConfig):
name = 'shared_users'
def ready(self):
from . import receivers
现在,每当删除 SharedUser 模型中的记录时,它都会进行大量SQL查询。
从{strong> apps.py 文件中删除import receivers
时。
使用接收方删除关联用户时,还会进行更多的SQL查询。
在我的用例中,除{strong> SharedUser 模型之外,没有其他地方将shared_user
与其他任何模型关联。
shared_user
与任何其他模型都不相关。 答案 0 :(得分:0)
问题出在您的shared_user = models.ForeignKey(User, on_delete=models.CASCASE, related_name='shared_user')
,特别是on_delete
属性中。
每次删除User
记录时,所有相关的SharedUser
记录也会被删除。
为防止删除,您应该使用on_delete=models.SET_NULL
。