继承DefaultSocialAccountAdapter自定义用户名函数报错:lower()被调用在None上
解决方案
错误原因是:当谷歌登录返回的用户数据中,first_name或last_name字段存在但值为None时,data.get('first_name','')会返回None(get方法仅在键不存在时才会使用默认值,键存在但值为None时仍返回None),此时调用lower()就会触发lower() was called on None错误。
修改后的代码如下:
def _build_username(self, data): from allauth.utils import generate_unique_username if not data.get('username'): # 先处理None值,确保调用lower()的是字符串 first_name = (data.get('first_name') or '').lower() last_name = (data.get('last_name') or '').lower() suggested_username = (f"{first_name}{last_name}",) username = generate_unique_username(suggested_username) return username
关键改动说明
- 使用
(data.get('first_name') or '')替代原有的data.get('first_name',''):无论字段值是None还是键不存在,都会得到空字符串,避免调用lower()时出现非字符串对象。 - 如果
first_name和last_name都为空,generate_unique_username会自动生成一个唯一的默认用户名(比如user123这类格式),无需额外处理。
内容的提问来源于stack exchange,提问作者user14612843
相关产品推荐
相关产品推荐

