Search code examples
pythondjangocachingdjango-signals

Django signals don't work with DEBUG=False


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?


Solution

  • Problem solved with weak=False added for every signal

    @receiver(signal=post_delete, sender=Marker, dispatch_uid="marker_deleted", weak=False)