UserCreationFormを変更して、ユーザが自分のサイトにサインアップすることを要求したときにlast_name + '。' + first_nameのユーザ名が与えられるようにしたい。Django UserCreationFormをカスタマイズして、ユーザが入力するのではなく、lastnameとfirstnameからユーザ名を作成しますか?
私のDjangoのforms.pyは:
<h2>Sign up</h2>
<form method="post">
{% csrf_token %}
{% for field in form %}
<p>
{{ field.label_tag }}<br>
{{ field }}
{% if field.help_text %}
<small style="color: grey">{{ field.help_text }}</small>
{% endif %}
{% for error in field.errors %}
<p style="color: red">{{ error }}</p>
{% endfor %}
</p>
{% endfor %}
<button type="submit">Sign up</button>
</form>
、私のviews.py中:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=False)
last_name = forms.CharField(max_length=30, required=False)
email = forms.EmailField(max_length=254)
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'password1', 'password2',)
exclude = ['username', ]
だから私は、実際のフォームからユーザー名を除外した
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
私はここにform.save()を入れてみて、cleaned_data first_name.last_name = usernameを取得しようとしましたが、 UserモデルUSERNAME_FIELD
属性は、フォームフィールドに存在する場合は、username
属性を除外したくないので、あなたがする別のフィールドを選択した場合を除き、それはデフォルトで初期化チェックのUserCreationForm
を
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')
username = firstname+'.'+lastname
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})
エラーが発生していますか? –
私のユーザ名はノンタイプです: username = form.cleaned_data.get( 'username') – trouselife
form.cleaned_dataを取得するには、form.save()を実行する必要がありますが、ユーザー名はNoneです。何とかform_save()を編集する必要がありますが、何をすべきかわかりません。 – trouselife