1
我有一個用戶上傳頭像的表單,它調整了照片的大小並使用新的頭像重新加載了頁面。沒有任何驗證,表單可以很好地工作。驗證在ImageField上拋出錯誤
當我添加一個驗證來提出錯誤,如果圖像低於一定的大小,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)
,所以它看起來像一個模型級驗證錯誤。你能告訴我爲什麼會出現這個錯誤,以及我如何解決它?謝謝
非常感謝你。這是我錯誤地做了一個很好的解釋。但是有一個相關的問題,即使我仍然覆蓋數據,爲什麼數據不通過驗證就會被驗證? – David542 2011-05-31 18:46:14