Django ModelForm无法正确处理文件

时间:2011-12-25 16:33:32

标签: django django-forms django-models

我有一个非常基本的模型,上面有一个ImageField,还有一个用于上传该图像的ModelForm。我的表单失败了,说我的图片无效,但是如果我直接从request.FILES实例化模型的图像,那就完美了。文件已上载并存在于我的媒体目录中。见下面的代码

此外,管理中心也失败了。

事情我很确定不是:

  • 的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()

模板

  <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 个答案:

答案 0 :(得分:2)

问题是没有jpeg支持的PIL安装。安装了libjpeg并重新安装了PIL,一切都运行良好。

有趣的是Django ModelForms验证了这一点,但模型却没有。在我尝试访问width / height属性之前,模型从未抛出错误。