2014-05-23 2 views
0

이 내 파일 forms.py장고 ImageField - 'NoneType'객체

class RegisterForm(forms.ModelForm): 
password = forms.CharField(widget=forms.PasswordInput()) 
password2 = forms.CharField widget=forms.PasswordInput()) 
username = forms.CharField(max_length=15) 
email = forms.CharField(max_length=25) 
avatar = forms.ImageField(required=False) 

class Meta: 
    model = User 
    fields = ('username', 'email', 'password', 'password2', 'avatar') 

def clean_password2(self): 
    password = self.cleaned_data.get("password") 
    password2 = self.cleaned_data.get("password2") 
    if not password2: 
     raise forms.ValidationError("error") 
    if password != password2: 
     raise forms.ValidationError("error2.") 

    return self.cleaned_data 


def clean_avatar(self): 
    image = self.cleaned_data['avatar'] 
    if image.size > 1*1024: 
     raise forms.ValidationError("Image file too large (> 1kb)") 
    return image 

models.py

class User(AbstractBaseUser): 
username = models.CharField(max_length=15, unique = True) 
email = models.CharField(max_length=25, unique = True) 
reg_date = models.DateTimeField(_('reg_date'), default=timezone.now) 
user_rating = models.IntegerField(default='0') 
avatar = models.ImageField(upload_to='avatars', blank=True) 

register.html

<form class="form" action='/auth/register/' method="post" enctype="multipart/form-data"> 
      {% csrf_token %} 
      {{ form.as_p }} 

      <div class="form-actions"> 
       <button type="submit" class="btn btn-info">Reg</button> 

      </div> 
     </form> 
입니다

나는이 오류가있어 결국 views.py

def register(request): 
context = RequestContext(request) 
registered = False 
if request.method == 'POST': 
    form = RegisterForm(data=request.POST) 
    if form.is_valid(): 
     user = form.save() 
     user.set_password(user.password) 
     if 'avatar' in request.FILES: 
      user.avatar = request.FILES['avatar'] 
     user.save() 
     registered = True 
    else: 
     print form.errors 
else: 
    form = RegisterForm() 
return render_to_response('loginsys/register.html', {'form': form, 'registered': registered}, context) 

:

'NoneType' object has no attribute 'size' 

    Request Method:  POST Request URL: xxxxx/auth/register/ Django Version: 1.6.2 Exception Type: AttributeError Exception Value:  

'NoneType' object has no attribute 'size' 

Exception Location:  /home/max/xxxxx/loginsys/forms.py in clean_avatar, line 37 



    loginsys/forms.py in clean_avatar 

     37 if image.size > 1*1024: 

... 

▶ 지역이 객체가 'NoneType는'항상 왜

Traceback Switch to copy-and-paste view 

/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in get_response 

         response = wrapped_callback(request, *callback_args, **callback_kwargs) 

    ... 
▶ Local vars 
/home/max/xxxxx/loginsys/views.py in register 

      if form.is_valid(): 

    ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/django/forms/forms.py in is_valid 

      return self.is_bound and not bool(self.errors) 

    ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/django/forms/forms.py in errors 

       self.full_clean() 

    ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/django/forms/forms.py in full_clean 

      self._clean_fields() 

    ... 
▶ Local vars 
/usr/local/lib/python2.7/dist-packages/django/forms/forms.py in _clean_fields 

         value = getattr(self, 'clean_%s' % name)() 

    ... 
▶ Local vars 
/home/max/xxxxx/loginsys/forms.py in clean_avatar 

      if image._size > 1*1024: 

    ... 
▶ Local vars 

을 바르? "def clean_avatar (self)"함수를 제거하면 파일이 성공적으로 저장됩니다.

+1

처음에는 수행하려는 작업에 대한 설명과 현재 가지고있는 문제점에 대해이 단어를 다시 말해야합니다. 모든 사람이 읽을 수있는 무의미한 코드입니다. 실제로 무엇을하려고하는지 전혀 알 수 없습니다. – Cylindric

+0

어디에서 clean_avatar 함수를 호출하고 있습니까? 전체 추적을 보여줘. 또한, 당신은'image._size'를 사용해야한다는 것에주의하십시오. –

+0

등록 양식을 만들고 아바타를 업로드하려고합니다. 아바타가로드되어 저장되었지만 크기 그림을 확인하고 싶습니다. 테스트 할 때마다 항상이 오류가 발생합니다. – russianstudent

답변

1

1) 양식을 통해 이미지 입력란의 유효성을 검사해야합니다.

form = RegisterForm(data=request.POST, files=request.FILES) 

2) 이미지 필드가 필요하지 않으므로 사용자가 이미지를 선택하지 않았 음을 고려해야합니다. 그래서 깨끗한 형태로 시험해 볼 수 있습니다.

if image and image.size > 1*1024: 

나는 희망을 가지고 도움을주었습니다.

+0

대단히 감사합니다 !!! – russianstudent