You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:17:34