2017-03-29 25 views
0

アクセスをリクエストするために、私のdjangoアプリケーションの登録ページを作成したいと考えています。言い換えれば、フォームを送信すると、ユーザーとuser.is_active = Falseが作成されます。管理者として私は彼らのアクセスを承認することができます。ユーザー名が "firstname.lastname"になるDjangoユーザー登録

しかし、私はそれらのユーザー名を入力することはできません。代わりに私は自分のユーザー名をfirstname.lastnameにしたい。同じ名前の人がサインアップしようとしているとは考えにくい(アプリが少人数の場合) - 最後に数字を追加する必要があります。

def signup(request): 
    if request.method == 'POST': 
     form = SignUpForm(request.POST) 

     if form.is_valid(): 
      form.save() 

      first_name = form.cleaned_data.get('first_name') 
      last_name = form.cleaned_data.get('last_name') 
      raw_password = form.cleaned_data.get('password1') 
      username = form.cleaned_data.get('username') 

      user = authenticate(username=username, password=raw_password) 

      user.is_active = False 
      user.save() 
      return render(request, 'registration/signedup.html', {'user': user}) 
     else: 
      return render(request, 'registration/signup.html', {'form': form, 'invalid': 'Please try again.'}) 
    else: 
     form = SignUpForm() 
     return render(request, 'registration/signup.html', {'form': form}) 

とサインアップフォーム::

class SignUpForm(UserCreationForm): 
    first_name = forms.CharField(max_length=30, required=False, help_text='Optional.') 
    last_name = forms.CharField(max_length=30, required=False, help_text='Optional.') 
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.') 

    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2',) 

と、この私のサインアップページのHTMLのように:

<form method="post" autocomplete="off"> 
    {% csrf_token %} 


    <table class='login' width='400'> 
    {% for field in form %} 

    <tr> 
    <td width='200' class='loginrow'>{{ field.label_tag }}</td> 
    <td width='180' class='loginrow'>{{ field }}</td> 
     {% for error in field.errors %} 
     <p style="color: red">{{ error }}</p> 
     {% endfor %} 
    </tr> 
    {% endfor %} 
</table> 

<button type="submit">Sign up</button> 

</form> 

私はサインアップビューを使用して、現時点でこれを行います

私は自分のフォームフィールドからユーザー名を削除しようとしましたが、私たちの見解では、username変数をfirs_name + '。' + last_nameとして作成していますer = authenticate()はnoneを返します。

ユーザーがユーザー名を入力せずに自動的にユーザー名を生成する方法はありますか?私はHTMLページでjavascript関数を使用することを考えていましたが、名前を連結する隠された 'username'入力タグも考えましたが、これを動作させることはできません。

おかげ

答えて

0

オーバーライドあなたが何か試みることができるSignUpForm

def save(self, commit=True): 
    instance = super(SignUpForm, self).save(commit=False) 
    instance.username = "%s.%s" %(self.cleaned_data['first_name'], self.cleaned_data['last_name']) 
    if commit: 
     instance.save() 
    return instance 
0

save方法:

my_data = dict(request.POST.iterlists()) 
my_data['username'] = my_data['firstname'] + '.' + my_data['lastname'] 

form = SignUpForm(my_data) 

if form.is_valid(): 
      form.save() 
... 
+0

は、私はこれを実行しようとしましたが、request.POSTはのQueryDictと – trouselife

+0

編集残念ながら不変です:dict-dictに変更する(request.POST.iterlists()) – giaco

+0

フォームはまだ有効ではありません – trouselife

関連する問題