# 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()