Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 验证在ImageField上引发错误_Django_Image Processing_Django Models_Django Forms - Fatal编程技术网

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():
    ...

非常感谢你。这是一个很好的解释,说明了我做错了什么。一个相关的问题是,为什么即使我仍在覆盖数据,数据也会在不使用验证的情况下进行验证?非常感谢。这是一个很好的解释,说明了我做错了什么。然而,一个相关的问题是,为什么即使我仍在覆盖数据,数据也要在不使用验证的情况下进行验证?