Django - AttributeError _committed

时间:2016-01-28 02:41:53

标签: python django pillow

我有一个保存图像的表单,一切正常,但我希望能够裁剪图像。然而,当我使用枕头做这件事时,我得到了一个奇怪的错误,并没有让我继续下去。

  

/ userprofile / addGame /

中的属性错误      

_committed

进一步了解回溯,突出显示了以下部分:

我不确定这个错误意味着什么。我认为它与form.save(committed=False)有关,而且在那之后无法编辑文件,但我并不乐观。我可以使用form.user = request.user在该行之后编辑用户,因此我认为我尝试更改上传的图片是问题的一部分。

1 个答案:

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