Я использую Django 2.2
В моем приложении есть функция общего пользователя, и каждый общий пользователь добавляется в Пользователь модель с 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 модель, мне также нужно удалить связанную запись shared_user
из 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 config
class SharedUsersConfig(AppConfig):
name = 'shared_users'
def ready(self):
from . import receivers
Теперь при удалении записи из модели SharedUser выполняется множество запросов SQL.
Когда import receivers
удаляется из файла apps.py .
Когда получатель используется для удаления связанного пользователя, выполняется намного больше запросов SQL.
В моем случае использование shared_user
нигде не связано ни с какой другой моделью, кроме SharedUser. модель.
- Как уменьшить запрос на удаление пользователя?
- Можно ли отключить отправку сигнала, когда пользовательудалено только для этого сценария?Поскольку
shared_user
не имеет отношения к какой-либо другой модели.