J'ai un modèle qui a une option photo. Quand une photo est ajoutée, je veux qu'une vignette soit automatiquement créée et stockée. Cependant, quand je fais ceci avec un signal pre_save, je continue à recevoir une IOError, et si j'essaye de le faire avec un signal post_save, je ne peux pas enregistrer le chemin des miniatures vers mon modèle sans créer et boucle post_save infinie.Obtenir IOError lors de l'utilisation du signal pre_save pour stocker une vignette
est ici le code
# using PIL
from PIL import Image
import os
...
# my model
class Course(models.Model):
...
photo = models.ImageField(upload_to='course_images/', blank=True, null=True)
thumbnail = models.ImageField(upload_to='course_images/thumbnails/', blank=True, null=True, editable=False)
...
# my pre_save signal
def resize_image(sender, instance, *args, **kwargs):
'''Creates a 125x125 thumbnail for the photo in instance.photo'''
if instance.photo:
image = Image.open(instance.photo.path)
image.thumbnail((125, 125), Image.ANTIALIAS)
(head, tail) = os.path.split(instance.photo.path)
(a, b) = os.path.split(instance.photo.name)
image.save(head + '/thumbnails/' + tail)
instance.thumbnail = a + '/thumbnails/' + b
models.signals.pre_save.connect(resize_image, sender=Course)
Post le retraçage aussi s'il vous plaît. –
Êtes-vous sûr que 'instance.photo.path' est valide avant que' save() 'soit fait? Qu'Est-ce que c'est? Un fichier existe-t-il sur ce chemin? –