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
Вернуться на верх