Django ModelForm неправильно обрабатывает файлы - PullRequest
2 голосов
/ 25 декабря 2011

У меня есть базовая модель с ImageField и ModelForm для загрузки этого изображения.Моя форма терпит неудачу, говоря, что мое изображение недопустимо, но если я создаю экземпляр изображения модели непосредственно из запроса. ФАЙЛЫ работают отлично.Файл загружен и существует в моем медиа-каталоге.См. Код ниже

Кроме того, это также не работает в Центре администрирования.

Вещи, я уверен, что это не так:

  • multipart / form-data
  • неверные настройки пути к носителю
  • настройки разрешений в этих каталогах.

models.py

class ImageTile(BaseTile):
    created_at = models.DateTimeField(default=datetime.datetime.now)
    updated_at = models.DateTimeField(auto_now=True)
    image = models.ImageField(upload_to='tiles/')

forms.py

class ImageTileForm(forms.ModelForm):
    class Meta:
        model = ImageTile
        fields = ('image', )

views.py

if request.method == 'POST':
    # Then we do image tiles
    #if request.FILES:
    image_form = ImageTileForm(request.POST, request.FILES)
    if image_form.is_valid():
        image_form.save()

template

  <form enctype="multipart/form-data" method="post" action="">
    {% csrf_token %}
    {{ image_form.non_field_errors }}
    {{ image_form.image.errors }}
    {{ image_form.image.label_tag }}
    {{ image_form.image }}
    <button type="submit">Submit</button>
  </form>

image_form.errors

django.forms.util.ErrorDict({'image': django.forms.util.ErrorList([u'Upload a valid image. The file you uploaded was either not an image or a corrupted image.'  ])})

вывод терминала при выполнении этого вручную

>>> from scrapbook.models import ImageTile
>>> x = ImageTile(image=request.FILES['image'])
>>> x.save()
>>> x.id
2
>>> x.image
<ImageFieldFile: tiles/cathy_orange.jpg>
>>> 

1 Ответ

2 голосов
/ 26 декабря 2011

Проблема была в установке PIL без поддержки jpeg.Установил libjpeg и переустановил PIL, и все отлично заработало.

Интересно, что Django ModelForms подтверждает это, а модель - нет.Модель никогда не выдавала ошибку, пока я не попытался получить доступ к атрибутам ширины / высоты.

...