Delete photo when not referenced any more by Recette instance

This commit is contained in:
Claude Paroz 2018-05-27 12:55:23 +02:00
parent 45de848cbe
commit 4f48503ab1
1 changed files with 34 additions and 0 deletions

View File

@ -1,4 +1,6 @@
import os
from django.db import models from django.db import models
from django.dispatch import receiver
from django.urls import reverse from django.urls import reverse
from .fields import ChoiceArrayField from .fields import ChoiceArrayField
@ -52,3 +54,35 @@ class Composition(models.Model):
def __str__(self): def __str__(self):
return "%s %s %s" % (self.quantite, self.unite.nom, self.ingredient.nom) return "%s %s %s" % (self.quantite, self.unite.nom, self.ingredient.nom)
@receiver(models.signals.post_delete, sender=Recette)
def auto_delete_photo_on_delete(sender, instance, **kwargs):
"""
Delete file from filesystem
when corresponding `Recette` object is deleted.
"""
if instance.photo:
if os.path.isfile(instance.photo.path):
os.remove(instance.photo.path)
@receiver(models.signals.pre_save, sender=Recette)
def auto_delete_photo_on_change(sender, instance, **kwargs):
"""
Delete old file from filesystem
when corresponding `Recette` object is updated
with new file.
"""
if not instance.pk:
return False
try:
old_file = Recette.objects.get(pk=instance.pk).photo
except Recette.DoesNotExist:
return False
new_file = instance.photo
if not old_file == new_file:
if os.path.isfile(old_file.path):
os.remove(old_file.path)