2017-02-15 3 views
0

私はシステム内のユーザーを作成するために作成ビューを使用していますが、管理者は "無効なパスワード形式または不明なハッシングアルゴリズム"ユーザーのために?私はパスワードを格納する前に暗号化されて、Djangoのデフォルトのユーザー・モデルを使用しているときに、フレームワークによって無効なパスワード形式または不明なハッシングアルゴリズムDjango Create View User

from django.views.generic.edit import CreateView 
from django.contrib.auth.forms import UserCreationForm 

class UserCreate(CreateView): 
    model = User 
    form = UserCreationForm 
    fields = ('username', 'first_name', 'last_name', 'password') 
    template_name = 'exts/user_create.html' 

    def get_success_url(self): 
     # login the person 
     self.object.backend = 'django.contrib.auth.backends.ModelBackend' 
     auth_login(self.request, self.object) 
     # now return the success url 
     return '/' 

    def get_form(self, form_class=None): 
     form = super(CreateView, self).get_form(form_class) 
     form.fields['password'].widget = forms.PasswordInput() 
     return form 

答えて

2

を提供UserCreationFormを使用しています。したがって、他のフィールドと同様にユーザーのパスワードを設定することはできません。ユーザーモデルのset_password('MyPassword')メソッドを使用してパスワードを設定する保存方法をオーバーライドする必要があります

+0

createviewには保存メソッドがありますか?それは私のためのpycharmに表示されない? –

1

formではなくform_classを使用して、使用するフォームクラスを指定する必要があります。

フィールドにpasswordもありますが、UserCreationFormにはpasswordフィールドは指定されていません。これはモデル上の有効なフィールドなので、フォームフィールドは自動的に生成されますが、パスワードは正しく設定されません。

代わりpassword1password2フィールドを追加する必要があります

class UserCreate(CreateView): 
    model = User 
    form = UserCreationForm 
    fields = ('username', 'first_name', 'last_name', 'password1', 'password2') 
    ... 
+0

'FieldError at/createaccount 私がそれをしたときに不明なフィールド(password2、password1)が指定されました。 –

+0

@GrantPowellそうです、あなたは' form_class'の代わりに 'form'を使っていません。 – knbk

+0

hmmmあなたは 'form_class'と' fields'を同時に使うことはできないと言っていますが、私は下の私の答えで動くようになっています –

0

はそれを考え出しました!フォームとモデルの属性の代わりにフォームクラスの属性を使いたいと思っています。

class UserCreate(CreateView): 
    form_class = UserCreationForm 
    template_name = 'exts/user_create.html' 
    success_url = '/' 

    def get_success_url(self): 
     # login the person 
     self.object.backend = 'django.contrib.auth.backends.ModelBackend' 
     auth_login(self.request, self.object) 
     # now return the success url 
     return '/' 
関連する問題