【发布时间】:2019-11-16 03:19:04
【问题描述】:
我正在使用 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 查询。
当 import receivers 从 apps.py 文件中删除时。
当接收者用于删除关联用户时,会进行更多的 SQL 查询。
在我的用例中,shared_user 没有与 SharedUser 模型以外的任何其他模型相关联。
- 如何减少删除用户的查询?
- 我能否仅在这种情况下删除用户时禁用发送信号?因为
shared_user与任何其他模型无关。
【问题讨论】:
标签: django django-models django-signals