사실 장고 등록은 여기에서 문제가되지 않았습니다. 문제는 새 Help_text로 사용자 이름 필드를 다시 정의하여 RegistrationForm을 서브 클래 싱했습니다. 그렇게 함으로서, 나는 그것의 자신의 정규식 필드를 사용하는 것을 막았다. 이 문제를 해결하기 위해 RegistrationForm에서 몇 가지 비트와 조각을 내 EnhancedRegistrationForm 하위 클래스로 가져와야했습니다.
이전 스타일의 사용자 이름 문자 제한 (내가 원하는대로)을 반영하는 정규식 행에 유의하십시오.
from registration.forms import RegistrationForm
# Carry these over from RegistrationForm - needed in the form definition below
attrs_dict = {'class': 'required'}
from django.utils.translation import ugettext_lazy as _
class EnhancedRegistrationForm(RegistrationForm):
first_name = forms.CharField(label='first name', max_length=30, required=True)
last_name = forms.CharField(label='last name', max_length=30, required=True)
username = forms.RegexField(regex=r'^\w+$',
max_length=30,
widget=forms.TextInput(attrs=attrs_dict),
help_text='Email addresses cannot be used as usernames.',
required=True,
label=_("Username"),
error_messages={'invalid':"You cannot use an email address as a username, sorry."})
class Meta:
fields = ('first_name','last_name','username','email','password1','password2')
def save(self, *args, **kwargs):
"""
Overriding save, so call the parent form save and return the new_user
object.
"""
new_user = super(EnhancedRegistrationForm, self).save(*args, **kwargs)
new_user.first_name = self.cleaned_data['first_name']
new_user.last_name = self.cleaned_data['last_name']
new_user.save()
return new_user
장고 등록이 활발하게 개발되지 않았습니까? ubernostrum이 커다란 리팩토링에 엄청난 노력을 기울여 사용자 정의 가능한 백엔드 등을 제공한다고 생각했습니다. 듣기에는 부끄러운 일입니다. 모든 프로젝트에서 사용합니다. 사실이 방법을 찾았습니다! 아래 답변. 감사 Yuval. – shacker