如何使用Django allauth适配器清理用户名?
Django allauth 在用户注册或登录时,会检查用户名是否包含非法字符,并且不区分大小写地确保用户名的唯一性。这一点非常好。但是,我想在自己的个人资料表单中也使用相同的验证规则,这个表单与用户有一对一的关系。目前,我在个人资料表单中无法实现相同的逻辑。
我想过可能是导入 DefaultAccountAdapter
并重写 def clean_username
,但是我遇到了以下问题:
TypeError at /accounts/profile/
clean_username() takes exactly 2 arguments (1 given)
我的 forms.py
文件:
from allauth.account.adapter import DefaultAccountAdapter
from .profiles.models import Profile
class UserForm(forms.ModelForm):
class Meta:
model = get_user_model()
fields = ('username', 'first_name', 'last_name',)
widgets = {
'username': forms.TextInput(
attrs={
'autocapitalize': 'off',
'autocorrect': 'off',
'placeholder': 'Username'
}
),
'first_name': forms.TextInput(
attrs={
'autocapitalize': 'words',
'autocorrect': 'off',
'placeholder': 'First name'
}
),
'last_name': forms.TextInput(
attrs={
'autocapitalize': 'words',
'autocorrect': 'off',
'placeholder': 'Last name'
}
),
}
help_texts = {
'username': '',
}
def clean_username(self, username):
adapter = DefaultAccountAdapter()
username = adapter.clean_username(username)
return username
1 个回答
1
我最后搞明白了。之前想得太复杂了。
from allauth.account.adapter import get_adapter
#...
def clean_username(self):
value = self.cleaned_data['username']
value = get_adapter().clean_username(value)
return value