Сигналы Django не работают с DEBUG=False
У меня есть следующий код, который прекрасно работает в режиме разработки с DEBUG=True. В двух словах - сигнал должен аннулировать кэш. В проекте используется Django 4.0, Python 3.9.
signals.py
from django.core.cache import cache
from django.db.models.signals import post_delete, post_save
from django.dispatch import receiver
from apps.hub.models import Comment, Marker
@receiver(signal=post_delete, sender=Marker, dispatch_uid="marker_deleted")
def clear_cache_delete_handler(sender, **kwargs):
"""Method for clearing a cache on home page after Marker instance has been deleted."""
cache.delete("markers_frontend")
@receiver(signal=post_save, sender=Marker, dispatch_uid="marker_updated")
def clear_cache_save_handler(sender, **kwargs):
"""Method for clearing a cache on home page after Marker instance has been updated."""
cache.delete("markers_frontend")
Я подключаю их в apps.py
from django.apps import AppConfig
class HubConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.hub'
def ready(self):
"""Register all signals."""
# Implicitly connect a signal handlers decorated with @receiver.
from . import signals
Но если я ставлю DEBUG=False, то сигналы не работают и в результате кэш не аннулируется. Я пробовал и на локальной машине и на хостинговом сервере. Результат один и тот же.
Что случилось?
Проблема решена с добавлением weak=False
для каждого сигнала
@receiver(signal=post_delete, sender=Marker, dispatch_uid="marker_deleted", weak=False)