デフォルトのdjango.contrib.auth.modelsユーザのユーザ名フィールドにスペースを入れることを許可しようとしていますが、他の人が直接または類似の質問を先に尋ねました:Here、Here、およびHere。私はこれらの提案を実装しようとしましたが、これをどのように動作させるかの良い例を見つけることができないようです。Djangoのユーザー名正規表現でスペースを許可するにはどうすればよいですか?
私は、usernameフィールドのバリデーターで正規表現を変更する必要があることから、私はusernameの別のフィールドを実装し、独自の検証を提供するcontrib.auth.formsからUserCreationFormをオーバーライドすることができます。 (this答えに示唆されているように)。
具体的にはどうすればよいですか?
参考のために、これは私がサインアップフォームとして使用していますどのような現在:
class SignUpForm(forms.ModelForm):
"""
This form class is for creating a player
"""
username = forms.CharField(label='Gamertag', max_length=16, widget=forms.TextInput(attrs={'placeholder': 'Gamertag', 'class': 'form-input'}))
email = forms.EmailField(label='email', widget=forms.TextInput(attrs={'placeholder': 'Email', 'class': 'form-input', 'type':'email'}))
password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password', 'class': 'form-input'}))
class Meta:
model = User
fields = ['username',
'email',
'password']
widgets = {
'password': forms.PasswordInput(),
}
def clean_email(self):
email = self.cleaned_data.get('email')
username = self.cleaned_data.get('username')
if email and User.objects.filter(email=email).exclude(username=username).count():
raise forms.ValidationError(u'A user with that email already exists.')
return email
実行中のDjangoのバージョンは? – Jonathan
私のDjangoバージョンは1.10.1 –