loko/streetup/observations/signals.py
2026-07-22 14:48:40 +02:00

37 lines
1.7 KiB
Python

# observations/signals.py
from django.db.models.signals import post_delete, post_save, pre_save
from django.dispatch import receiver
from .models import ObservationPhoto
@receiver(post_delete, sender=ObservationPhoto)
def delete_photo_file_on_delete(sender, instance, **kwargs):
"""Supprimer le fichier photo (et sa miniature) lorsqu'on supprime l'instance ObservationPhoto"""
if instance.photo and instance.photo.storage.exists(instance.photo.name):
instance.photo.delete(save=False)
if instance.thumbnail and instance.thumbnail.storage.exists(instance.thumbnail.name):
instance.thumbnail.delete(save=False)
@receiver(pre_save, sender=ObservationPhoto)
def delete_old_photo_on_change(sender, instance, **kwargs):
"""Supprimer l'ancien fichier si on remplace la photo"""
if not instance.pk:
return # Nouveau fichier, pas de remplacement
try:
old_instance = ObservationPhoto.objects.get(pk=instance.pk)
except ObservationPhoto.DoesNotExist:
return
if old_instance.photo and old_instance.photo != instance.photo:
if old_instance.photo.storage.exists(old_instance.photo.name):
old_instance.photo.delete(save=False)
# Supprimer également l'ancienne miniature
if old_instance.thumbnail and old_instance.thumbnail.storage.exists(old_instance.thumbnail.name):
old_instance.thumbnail.delete(save=False)
@receiver(post_save, sender=ObservationPhoto)
def generate_thumbnail_on_save(sender, instance, created, **kwargs):
"""Générer la miniature après l'enregistrement d'une nouvelle photo."""
if created and instance.photo and not instance.thumbnail:
instance.generate_thumbnail()