我有一个非常基本的模型,上面有一个ImageField,还有一个用于上传该图像的ModelForm。我的表单失败了,说我的图片无效,但是如果我直接从request.FILES实例化模型的图像,那就完美了。文件已上载并存在于我的媒体目录中。见下面的代码
此外,管理中心也失败了。
事情我很确定不是:
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>
>>>
答案 0 :(得分:2)
问题是没有jpeg支持的PIL安装。安装了libjpeg并重新安装了PIL,一切都运行良好。
有趣的是Django ModelForms验证了这一点,但模型却没有。在我尝试访问width / height属性之前,模型从未抛出错误。