0

基本クラスUserCreationFormからdjangoにメールフィールドを追加するサインアップフォームを作成しようとしています。コードは次のようになります

フォーム.py

class ussignup(UserCreationForm):
  email=forms.EmailField(required=True)
  first_name=forms.CharField(required=False)
  last_name=forms.CharField(required=False)
  class Meta:
    model=User
    fields=('username','password1','password2','first_name','last_name','email',)
    #fields=('username','password','first_name','last_name','email')

  def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.email=self.cleaned_data["email"]
        user.first_name=self.cleaned_data["first_name"]
        user.last_name=self.cleaned_data["last_name"]
        if commit:
            user.save()
        return user

view.py

def signup(request):
    if request.method=='POST':
        form=ussignup(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/accounts/rgsuc')

    args={}
    args.update(csrf(request))
    args['form']=form
    return render_to_response('register.html',args)

urls.py

 url(r'^accounts/signup',signup),

エラー 出力にはフォームが表示されますが、フィールドに入力されたパスワードはデータベースに保存されません。したがってno password、管理者から表示され、ログインできない場合に表示されます。

4

2 に答える 2

0

または、メソッドでこれ (つまりussignup、基本クラスの代わりにクラス名) を変更するだけUserCreationFormで、機能していたはずです。

def save(self, commit=True):
    user = super(ussignup, self).save(commit=False)
    user.email=self.cleaned_data["email"]
    user.first_name=self.cleaned_data["first_name"]
    user.last_name=self.cleaned_data["last_name"]
    if commit:
        user.save()
    return user

これが役立つことを願っています。

于 2013-11-11T17:33:28.547 に答える
0

わかりました、ようやくわかりました。追加する必要があります

user.set_password(self.cleaned_data["password1"])

これはdjango自体によって保存されると思っていましたが、保存機能をオーバーライドしたため、保存する必要もあります

于 2013-11-11T12:03:48.610 に答える