Dans mon projet actuel, mes images sont stockées sur un s3. J'ai un récepteur de signal pre_save pour supprimer l'image réelle du s3 seau sur la classe Image.en utilisant PATCH avec un champ d'image Django et s3
class Image(models.Model):
name = models.CharField(max_length = 255)
caption = models.CharField(max_length = 255)
image = models.ImageField(upload_to='uploads/',blank=True,null=True)
rent_property = models.ForeignKey(RentProperty, related_name='Images')
is_main_image = models.BooleanField(default=False)
@receiver(models.signals.pre_save, sender=Image)
def auto_delete_file_on_change(sender, instance, **kwargs):
"""Deletes file from filesystem
when corresponding `MediaFile` object is changed.
"""
if not instance.pk:
return False
try:
old_file = Image.objects.get(pk=instance.pk).image
except Image.DoesNotExist:
return False
new_file = instance.image
if not old_file == new_file:
old_file.delete(save=False)
Mon problème est, j'utilise django-rest-framework, et je veux que le PATCH fonctionne. mais si j'essaye de patcher une description d'image par exemple, cela effacera l'image elle-même. Ma question est, comment puis-je écrire un IF qui permettrait de différencier la météo ou non, il y a une nouvelle image dans le patch qui a besoin de changer, et sinon, ne rien faire?
habituellement j'enregistre un hachage SHA-1 dans un champ de modèle pour les fichiers de données et vérifier si elle change. Cela fonctionnerait-il dans votre cas? – Fiver
Vous êtes tout à fait le génie. Cela a fonctionné parfaitement. Puisqu'il obtient un nouveau nom unique aléatoire chaque fois qu'il se met à jour, je vérifie juste si c'est changé, sinon, je garde l'ancienne image. Pouvez-vous s'il vous plaît écrire votre commentaire sous la forme d'une réponse afin que je puisse l'accepter et cela pourrait aider d'autres personnes dans le futur? –
Super, content que ça a marché pour vous. J'ai ajouté une réponse avec un peu plus de détails. – Fiver