2016-05-07 7 views
0

私は自分のプロフィールを編集できます。Django、パスワード確認でユーザープロフィールを更新

ユーザーはユーザー名、メールアドレス、画像を持っています。

また、プロフィールを編集するときにユーザーが自分のパスワードを確認してほしいと思っています。それが自分の問題の場所です。

それはその

enter image description here

の代わりに自分のパスワードをチェックし、ユーザー名および/または電子メールの更新および/または私のプログラムはすべての更新を描くように見えます。 Plusパスワードは更新後に破損します。 HTMLで

forms.py

class UpdateProfile(forms.ModelForm): 
    username = forms.RegexField(regex=r'^\w+$', widget=forms.TextInput(attrs=dict(required=True, max_length=30)), 
           label=_("Username"), error_messages={ 
      'invalid': _("This value must contain only letters, numbers and underscores.")}) 
    email = forms.EmailField(widget=forms.TextInput(attrs=dict(required=True, max_length=30)), label=_("Email address")) 
    password = forms.CharField(
     widget=forms.PasswordInput(attrs=dict(required=True, max_length=30, render_value=False)), label=_("Password")) 
    picture = forms.ImageField(required=False) 

    class Meta: 
     model = Person 
     fields = ('username', 'email', 'password', 'picture') 

    def clean_username(self): 
     if self.initial['username'] == self.cleaned_data['username']: 
      return self.cleaned_data['username'] 
     try: 
      user = Person.objects.get(username__iexact=self.cleaned_data['username']) 
     except Person.DoesNotExist: 
      return self.cleaned_data['username'] 
     raise forms.ValidationError(_("The username already exists. Please try another one.")) 

    def clean_email(self): 
     email = self.cleaned_data["email"] 
     if self.initial['email'] == email: 
      return email 
     try: 
      gg = Person.objects.get(email=email) 
     except Person.DoesNotExist: 
      return email 
     print("DUPLICATE") 
     raise forms.ValidationError('duplicate email') 

    def clean(self): 
     if 'password' in self.cleaned_data : 
      p =Person.objects.get(username__iexact=self.initial['username']) 
      if not p.check_password(self.cleaned_data['password']): 
       raise forms.ValidationError(_("Password is wrong.")) 
     return self.cleaned_data 

views.py

def edit(request): 
    args = {} 
    args.update(csrf(request)) 
    if request.method == 'POST': 
     user_form = UpdateProfile(request.POST, request.FILES, instance=Person.objects.get_by_natural_key(request.user.get_username())) 
     args['user_form'] = user_form 
     if user_form.is_valid(): 
      user_form.save() 
      return HttpResponseRedirect('/profile/') 
    args['user_form'] = UpdateProfile(request.POST or None) 
    args['user2'] = Person.objects.get_by_natural_key(request.user.get_username()) 
    return render_to_response('edit.html', args, context_instance=RequestContext(request)) 

私は、デフォルトのフォームを持っています。

私はパスワードフィールドがUpdateProfileにあることが問題だと思います。しかし、私はそれを動作させる方法を知らない。

答えて

0
class Meta: 
     model = Person 
     fields = ('username', 'email', 'picture') 

フィールドからパスワードを削除しても機能しています。私はそれが私の問題の適切な解決策であるかどうかわかりませんが、それは機能します。

関連する問題