I have the following code that work fine in development mode with DEBUG=True. In a nutshell - signal should invalidate a cache. The project running Django 4.0, Python 3.9, MySQL MarialDB 10.2
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")
I connect them in 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
But whether I set DEBUG=False, signals don't work and as a result cache is not invalidates. I tried both - local machine and a hosting server. Result is the same.
What is wrong?
Problem solved with weak=False
added for every signal
@receiver(signal=post_delete, sender=Marker, dispatch_uid="marker_deleted", weak=False)