У меня есть форма, где пользователь загружает аватар, и он изменяет размер фотографии и перезагружает страницу с новым аватаром.Форма работает отлично без какой-либо проверки.
Когда я добавляю проверку, чтобы вызвать ошибку, если изображение меньше определенного размера, forms.ValidationError
работает нормально.Однако когда данные проходят проверку , это приводит к ошибке формы.
Вот то, что у меня сейчас есть -
def handle_uploaded_image(i):
### enter size of thumbnail, returns (filename, content)
def getting_started_pic(request):
form = ProfilePictureForm()
username = request.session.get('username')
profile = UserProfile.objects.get(user=username)
if request.method == 'POST':
form = ProfilePictureForm(request.POST, request.FILES)
if form.is_valid():
form = ProfilePictureForm(request.POST, request.FILES, instance = profile)
ob = form.save(commit=False)
try:
t = handle_uploaded_image(request.FILES['avatar'])
ob.avatar.save(t[0],t[1])
except KeyError:
ob.save()
return render_to_response (...)
return render_to_response (...)
А в models.py -
class ProfilePictureForm(ModelForm):
avatar = forms.ImageField()
class Meta:
model = UserProfile
fields = ('avatar')
def clean_avatar(self):
import StringIO
from PIL import Image, ImageOps
str=""
for c in self.cleaned_data['avatar'].chunks():
str += c
imagefile = StringIO.StringIO(str)
image = Image.open(imagefile)
width, height = image.size[0], image.size[1]
if width < 200 or height < 200:
raise forms.ValidationError("Please upload an image at least 200 pixels wide.")
else:
return self.cleaned_data['avatar']
Так что, когда я использую эту проверку, и она возвращает cleaned_data
выдает следующее сообщение об ошибке:
The UserProfile could not be changed because the data didn't validate.
Из трассировки выдается строка с ошибкой: ob = form.save(commit=False)
, поэтому она выглядит как ошибка проверки на уровне модели.Не могли бы вы сказать мне, почему эта ошибка происходит, и как я могу это исправить?Спасибо