0

当我保存模型与空白图像字段,然后它显示错误,这个错误是由于模型中的图像字段的自定义表单验证。而且if语句在自定义表单验证方法中不起作用。django自定义表单验证错误

" 'unicode' object has no attribute '_size' ". 

models.py

class ImageUpload(models.Model): 
    image = models.ImageField(upload_to='uploads') 
    name = models.CharField(max_length='128') 

    class Meta: 
     db_table = 'image_upload' 

formy.py

class ImageUploadForm(forms.ModelForm): 

    class Meta: 
    model = ImageUpload 

    def clean_image(self): 
     image = self.cleaned_data.get('image',None) 
     if image: # this is not working, if image field is blank 
      if image._size: 
       if image: 
        if image._size > 1*1024*1024: 
         raise ValidationError("Image file too large (> 4mb)") 
        return image 
       else: 
        raise ValidationError("Couldn't read uploaded image") 
      else: 
       raise ValidationError("image format should be .png %s"%(image_format)) 

views.py

def add_image(request): 
    response_data = {} 

    if request.method == 'POST': 
     form = ImageUploadForm(request.POST,request.FILES) 
     context = { 
       'form':form 
        } 
     if form.is_valid(): 
      form.save() 
      response_data['status'] = 'true' 
      response_data['message'] = 'successfully added' 
      return HttpResponse(json.dumps(response_data),content_type='application/javascript') 
     else: 
      response_data['message'] = form.errors 
     #return HttpResponse(response_data) 
     return HttpResponse(json.dumps(response_data),content_type='application/javascript') 
    else: 
     form = ImageUploadForm() 
     context = { 
       'form':form 
        } 
     return render(request,'users/add_image.html',context) 

回答

1

的错误是在表格上

image = self.cleaned_data.get('image',None) 

你应该得到像

if 'image' in request.FILES: 
    image = request.FILES['image'] 
+0

非常感谢@brunofitas图像 – Thameem 2015-03-25 08:11:39