37 lines
1.7 KiB
Python
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()
|