我有一个保存图像的表单,一切正常,但我希望能够裁剪图像。然而,当我使用枕头做这件事时,我得到了一个奇怪的错误,并没有让我继续下去。
/ userprofile / addGame /
中的属性错误_committed
进一步了解回溯,突出显示了以下部分:
我不确定这个错误意味着什么。我认为它与form.save(committed=False)
有关,而且在那之后无法编辑文件,但我并不乐观。我可以使用form.user = request.user
在该行之后编辑用户,因此我认为我尝试更改上传的图片是问题的一部分。
答案 0 :(得分:1)
这是一篇很老的帖子,但我最近遇到了类似的问题。 问题中的信息有些不完整,但我也有同样的错误。
假设错误
文件" /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/PIL/Image.py",第627行,在__getattr__中 引发AttributeError(名称)
AttributeError:_committed
因此根本问题在于使用PIL(Pillow)。功能:
image = Image.open(self.cleaned_data['image'])
我们错误地认为对象图像会继续拥有 整个函数中的图像实例(在我的例子中是clean_image)。
所以在我的代码结构中,
def clean_image(self):
if self.cleaned_data['image']:
try:
image = Image.open(self.cleaned_data['image'])
image.verify()
except IOError:
raise forms.ValidationError(_('The file is not an image'))
return image
执行此代码后抛出上述错误。是的,因为
在我们使用的其他几个PIL(枕头)功能之后,我们需要 再次打开文件。在pillow documentation
中查看此信息
如上面的代码(最后一行),
return image
并没有真正归还任何东西。
修复
只需添加,
image = self.cleaned_data['image']
在return image
行之前。
代码看起来像,
except IOError:
raise forms.ValidationError(_('The file is not an image'))
image = self.cleaned_data['image']
return image