Lower() был вызван на None
Я создал пользовательскую функцию для создания пользовательского имени пользователя в классе, наследующем DefaultSocialAccountAdapter. Код выглядит следующим образом.
def _build_username(self,data):
from allauth.utils import generate_unique_username
if(not data.get('username')):
first_name=data.get('first_name','').lower()
last_name=data.get('last_name','').lower()
suggested_username = (f"{first_name}{last_name}",)
username = generate_unique_username(suggested_username)
return username
Но он бросает lower() был вызван на None
Я пытался преобразовать имя в нижний регистр, потому что именно так наша база данных поддерживает имена пользователей. Это происходит, когда я пытаюсь выполнить метод аутентификации google login.
Это возможно, если 'first_name'
находится в data
и ассоциирует ключ с None
, например, {'first_name': None}
.
Вы можете использовать оператор or
, чтобы заменить его пустой строкой, так:
def _build_username(self,data):
from allauth.utils import generate_unique_username
username = data.get('username')
if not username:
first_name=data.get('first_name') or ''
last_name=data.get('last_name') or ''
username = generate_unique_username(f'{first_name}{last_name}'.lower())
return username
Потому что данные могут содержать ключ first_name или last_name, но его значение может быть None. Поэтому вы можете добавить проверку условия, чтобы убедиться, что это не None
def _build_username(self,data):
from allauth.utils import generate_unique_username
if(not data.get('username')):
first_name=data.get('first_name','')
last_name=data.get('last_name','')
l=[]
if(first_name):
l.append(first_name.lower().strip())
else:
l.append('')
if(last_name):
l.append(last_name.lower().strip())
else:
l.append('')
suggested_username = (f"{l[0]}{l[1]}",)
username = generate_unique_username(suggested_username)
return username