在Django中集成Allauth与自定义用户模型时触发AssertionError的原因?
Django Allauth 结合自定义用户模型触发AssertionError的原因
问题场景
在Django项目中整合Allauth与自定义用户模型时,启动服务器抛出AssertionError,报错栈如下:
File "X:\Aidan Comer\Documents\Portfolio_Projects\game_ecommerce_site\venv\lib\site-packages\allauth\account\app_settings.py", line 373, in <module> app_settings = AppSettings("ACCOUNT_") File "X:\Aidan Comer\Documents\Portfolio_Projects\game_ecommerce_site\venv\lib\site-packages\allauth\account\app_settings.py", line 20, in __init__ assert ( AssertionError
自定义用户模型代码:
class UserBase(AbstractBaseUser, PermissionsMixin): email = models.EmailField(_('email address'), unique=True) first_name = models.CharField(max_length=150, blank=True) last_name = models.CharField(max_length=150, blank=True) country = CountryField() date_of_birth = models.DateField(max_length=8) phone_number = PhoneNumberField(null=False, blank=False, unique=True) town_city = models.CharField(max_length=150, blank=True) avatar = models.ImageField(upload_to='avatars', default='default-user-avatar.png') is_active = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) created = models.DateTimeField(auto_now=True) objects = CustomAccountManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['first_name', 'last_name', 'country', 'phone_number', 'date_of_birth', 'town_city',]
相关Allauth及Google OAuth配置:
# Allauth and Oauth login settings SOCIALACCOUNT_LOGIN_ON_GET=True AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend', ] ACCOUNT_AUTHENTICATION_METHOD = "email" ACCOUNT_USER_MODEL_USERNAME_FIELD = None ACCOUNT_USER_MODEL_USERNAME_FIELD = False ACCOUNT_EMAIL_VERIFICATION = 'none' SOCIALACCOUNT_PROVIDERS = { 'google': { 'SCOPE': [ 'profile', 'email', ], 'AUTH_PARAMS': { 'access_type': 'online', } } }
错误触发原因
核心问题在于配置中重复且错误地设置了ACCOUNT_USER_MODEL_USERNAME_FIELD:
- 你先将该参数设为
None(这是正确的,因为自定义用户模型没有username字段),但随后又覆盖为False - Allauth的
AppSettings初始化时会校验该参数:它要求值要么是用户模型中存在的字段名字符串,要么是None(表示模型无username字段),布尔值False不符合断言条件,因此触发AssertionError
修复方案
删除配置中重复的错误行,仅保留正确设置:
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
内容的提问来源于stack exchange,提问作者ALHComer
相关产品推荐
相关产品推荐

