You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

33 lines
1.5 KiB

# hadith_app/signals.py
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from django.core.cache import cache
from .models import *
# 1. Define all models that affect the list
# If a Category title changes, the list must update.
# If a Status changes, the list must update.
TARGET_MODELS = [Hadis , HadisCategory , HadisCollection , HadisCorrection , HadisInCollection , HadisReference ,
HadisSect , HadisStatus , HadisTag , HadisTransmitter , Transmitters ,TransmitterOpinion , TransmitterReliability,
TransmitterOriginalText,ReferenceImage , BookReference , BookAttribute, BookAuthor ,BookReferenceImage,
NarratorLayer , OpinionStatus ]
@receiver(post_save)
@receiver(post_delete)
def clear_hadis_cache(sender, instance, **kwargs):
"""
Clears the API cache whenever a Hadith or related model is saved/deleted.
"""
if sender in TARGET_MODELS:
# This is the magic command from django-redis
# It finds ALL keys starting with the prefix and deletes them
# *:1: is the default django version prefix
try:
# Delete any key that contains our prefix "hadis_api"
# The pattern "*hadis_api*" ensures we catch all variations (headers, pages, etc)
cache.delete_pattern("*hadis_api*")
print(f"Cache cleared for {sender.__name__} update!")
except Exception as e:
# Fail silently or log error, don't crash the save transaction
print(f"Cache clear failed: {e}")