Получение IOError при использовании сигнала pre_save для сохранения миниатюры - PullRequest
2 голосов
/ 13 августа 2010

У меня есть модель, у которой есть опция фото поле.Когда фотография добавлена, я хочу, чтобы миниатюра автоматически создавалась и сохранялась.Однако, когда я делаю это с сигналом pre_save, я продолжаю получать IOError, и если я пытаюсь сделать это с сигналом post_save, я не могу сохранить путь миниатюр к моей модели без создания бесконечного цикла post_save.

Вот код

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

1 Ответ

2 голосов
/ 14 августа 2010

Я понял это.У меня возникла проблема с сохранением поля миниатюр, и я пытался сделать это в сигнале.Поэтому, чтобы исправить это, я сохраняю поле миниатюр в функции моделей save () и оставляю сигнал для создания миниатюр.

Просто мне понадобилось время, чтобы понять: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...