1
我想通过实现文件大小限制和文件扩展名来验证上传的图像。 问题是当一个图像上传,我要验证的文件大小限制,文件扩展名被之前的过程,但我得到这个错误Django验证错误
“member_descriptor”对象是unsubscriptable
forms.py" in clean_image
43. if not file.name[-3:].lower() in ['jpg']:
Exception Type: TypeError at /pro/
Exception Value: 'member_descriptor' object is unsubscriptable
File "C:\Python26\lib\site-packages\django\forms\forms.py" in _get_errors
115. self.full_clean()
File "C:\Python26\lib\site-packages\django\forms\forms.py" in full_clean
270. self._clean_fields()
我Forms.py
class PersonForm(forms.ModelForm):
def clean_image(self):
cleaned_data = super(PersonForm,self).clean()
image = cleaned_data.get("image")
if image:
if image._size > 4*1024*1024:
raise forms.ValidationError("Image Must be <4mb Less")
if not file.name[-3:].lower() in ['jpg']:
raise forms.ValidationError("Your file extension was not recongized")
return image
class Meta:
model = Person
fields = ('image',)
views.py
def pro(request):
form = PersonForm()
if request.POST.has_key('pro'):
form = PersonForm(request.POST,request.FILES)
if request.POST['pro'] == 'first':
if form.is_valid():
person = Person.objects.get(user=request.user)
image = form.cleaned_data['image']
if image:
person.image = form.cleaned_data['image']
person.save()
return render(request,'profile.html',{'form':form})
我的models.py
class Person(models.Model):
user = models.ForeignKey(User)
image = models.FileField(upload_to="images/",blank=True)
def __unicode__(self):
return self.name
因为你有'def check_extension(file):if ['jpg']中的file.name [-3:]。lower():return True else:return False' ,这不是这种情况。 – 2013-04-24 15:13:34
@PauloBu我简单地使用'image.file.name.endswith('jpg')'就像[PEP-8推荐](http://www.python.org/dev/peps/pep-0008/#programming推荐)或者创建一个像@BurhanKhalid建议的函数 – 2013-04-24 15:20:40
当然,我只是指出他所指的'file'不是真正的字段。 – 2013-04-24 15:28:21