2012-05-12 4 views
0

AdminPasswordChangeForm을 사용하여 비밀번호를 변경하는 것에 대해별로 생각하지 않습니다. 나는 자습서를 가지고이 조각 발견장고에서 AdminPasswordChangeForm으로 비밀번호를 변경하는 중 오류가 발생했습니다

def user_change_password(request, id): 
    form = AdminPasswordChangeForm(User, request.POST) 
    if form.is_valid(): 
     new_user = form.save() 
     msg = _('Password changed successfully.') 
     request.user.message_set.create(message=msg) 
     return HttpResponseRedirect('..') 
    else: 
     form = AdminPasswordChangeForm(User) 
     extra_context = {  
      'form': form, 
      'change': True 
     } 
     return direct_to_template(request,"users/user_password_change.html", 
      extra_context = extra_context) 

모든 것이 url.py 및 템플릿 user_password_chage.html 괜찮이다. 템플릿 레벨에서 두 개의 비밀번호 필드가있는 폼을 보여줍니다 : 하나는 비밀번호이고 두 번째 비밀번호 (다시)입니다. 내가 다음과 같은 오류를 보여줍니다 암호 변경을 클릭 버튼을 제출 때 :

unbound method set_password() must be called with User instance as first argument (got unicode instance instead)

을 내가 장고에 초보자 오전 공식 문서에서이 양식에 대해 아무것도 발견되지 않았다.

답변

1

양식 인스턴스화 호출의 첫 번째 매개 변수는 User 클래스가 아닌 사용자 인스턴스입니다. 즉, 암호를 변경하려는 실제 사용자 여야합니다. 아마도 현재 사용자이기 때문에 request.user :

+0

답장을 보내 주셔서 감사합니다. ID를 전달하여 암호를 변경합니다. 그래서 나는 먼저 id와 연관되어있는 사용자 이름을 알아 내야하고 그런 다음 그 사용자 이름을 함수에 전달해야합니까? 이 ID 이외에 is_staff 옵션을 변경해야한다면 어떻게해야합니까? –

+1

아니요, 사용자 이름이 아닌 사용자 인스턴스입니다. User.objects.get (pk = my_id)하면됩니다. –

+0

성공적으로 실행되며 is_staff 옵션 변경은 어떻게됩니까? –

관련 문제