Django 验证在ImageField上引发错误
我有一个表单,用户上传一个头像,它调整照片的大小并用新头像重新加载页面。表单在没有任何验证的情况下工作正常 当我添加验证以在图像小于某个大小时引发错误时,Django 验证在ImageField上引发错误,django,image-processing,django-models,django-forms,Django,Image Processing,Django Models,Django Forms,我有一个表单,用户上传一个头像,它调整照片的大小并用新头像重新加载页面。表单在没有任何验证的情况下工作正常 当我添加验证以在图像小于某个大小时引发错误时,forms.ValidationError工作正常。但是,当数据通过验证时,会导致表单出错 这是我目前拥有的-- 在models.py中-- class ProfilePictureForm(模型形式): avatar=forms.ImageField() 类元: model=UserProfile 字段=('avatar') def clea
forms.ValidationError
工作正常。但是,当数据通过验证时,会导致表单出错
这是我目前拥有的--
在models.py中--
class ProfilePictureForm(模型形式):
avatar=forms.ImageField()
类元:
model=UserProfile
字段=('avatar')
def clean_化身(自我):
导入StringIO
从PIL导入图像,图像操作
str=“”
对于self.cleaned_数据['avatar'].chunks()中的c:
str+=c
imagefile=StringIO.StringIO(str)
image=image.open(imagefile)
宽度,高度=image.size[0],image.size[1]
如果宽度小于200或高度小于200:
raise forms.ValidationError(“请上传至少200像素宽的图像。”)
其他:
返回自清理的_数据['avatar']
因此,当我使用此验证并返回cleaned_data
时,它抛出以下错误:
无法更改用户配置文件,因为数据未验证。
从回溯中,引发错误的行是:ob=form.save(commit=False)
,因此它看起来像是模型级验证错误。您能告诉我为什么会发生这个错误,以及我如何修复它吗?谢谢可能是这样的:
form = ProfilePictureForm(request.POST, request.FILES)
if form.is_valid():
form = ProfilePictureForm(request.POST, request.FILES, instance = profile)
...
表单验证后,将使用从数据库中已有的实例创建的新ModelForm覆盖表单。这将消除对您刚刚上传内容的任何引用,因此不会验证
尝试一下以下方法:
form = ProfilePictureForm(request.POST, request.FILES, instance = profile)
if form.is_valid():
...
可能是这样的:
form = ProfilePictureForm(request.POST, request.FILES)
if form.is_valid():
form = ProfilePictureForm(request.POST, request.FILES, instance = profile)
...
表单验证后,将使用从数据库中已有的实例创建的新ModelForm覆盖表单。这将消除对您刚刚上传内容的任何引用,因此不会验证
尝试一下以下方法:
form = ProfilePictureForm(request.POST, request.FILES, instance = profile)
if form.is_valid():
...
非常感谢你。这是一个很好的解释,说明了我做错了什么。一个相关的问题是,为什么即使我仍在覆盖数据,数据也会在不使用验证的情况下进行验证?非常感谢。这是一个很好的解释,说明了我做错了什么。然而,一个相关的问题是,为什么即使我仍在覆盖数据,数据也要在不使用验证的情况下进行验证?