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

Django自定义User模型后迁移及Google认证报错求助

问题描述

我在settings.py中添加了AUTH_USER_MODEL = 'main.User'(main是存放所有模型的应用),将自定义User模型设为认证用户模型。但后来才知道这个配置应该在初始迁移前设置,现在尝试在后台集成Google认证时,收到auth_user表为空(无id为1的记录)的错误。

我尝试删除迁移文件并将数据库恢复到迁移前状态,却出现错误:

ValueError: The field socialaccount.SocialAccount.user was declared with a lazy reference to 'main.user', but app 'main' isn't installed.

按照一篇文章的建议清空了PostgreSQL数据库、迁移文件及__pycache__后,执行makemigrations时出现错误:

ValueError: The field socialaccount.SocialAccount.user was declared with a lazy reference to 'auth.user', but app 'auth' isn't installed.

执行migrate时又出现:

django.db.utils.ProgrammingError: relation "main_user" does not exist

已尝试搜索解决方案但无果,求解决办法。

settings.py 部分配置
INSTALLED_APPS = [
    'landing',
    'main',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites', 
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
]

TEMPLATES = [
    {
        'DIRS': [
            os.path.join(BASE_DIR, 'landing', 'frontend', 'build'),
            os.path.join(BASE_DIR, 'landing', 'templates'),
            os.path.join(BASE_DIR, 'main', 'frontend', 'dist'),
        ],
        # ...
    },
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        # ...
    }
}

AUTH_USER_MODEL = 'main.User'

STATICFILES_DIRS = [
    # ...
]

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend'
]

SITE_ID = 1
LOGIN_REDIRECT_URL = '/'

# Additional configuration settings
SOCIALACCOUNT_QUERY_EMAIL = True
ACCOUNT_LOGOUT_ON_GET= True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_REQUIRED = True

SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': [
            'profile',
            'email',
        ],
        'AUTH_PARAMS': {
            'access_type': 'online',
        }
    }
}
解决方案

1. 彻底清理残留的迁移和缓存

  • 删除所有应用下的migrations文件夹(保留每个文件夹里的__init__.py)
  • 删除项目根目录及所有应用内的__pycache__文件夹
  • 清空PostgreSQL数据库:
    DROP DATABASE your_db_name;
    CREATE DATABASE your_db_name;
    
    也可以用pgAdmin等可视化工具直接删除重建数据库

2. 确认自定义User模型及应用配置

  • 检查main应用的models.py,确保自定义User模型正确继承AbstractUser或AbstractBaseUser,示例:
    from django.contrib.auth.models import AbstractUser
    from django.db import models
    
    class User(AbstractUser):
        # 自定义字段写在这里
        pass
    
  • 确认main/apps.py配置正确:
    from django.apps import AppConfig
    
    class MainConfig(AppConfig):
        default_auto_field = 'django.db.models.BigAutoField'
        name = 'main'
    

3. 重新生成并执行迁移

  • 先给main应用生成初始迁移(确保自定义User模型的迁移优先生成):
    python manage.py makemigrations main
    
  • 执行所有迁移:
    python manage.py migrate
    

4. 创建超级用户

python manage.py createsuperuser

5. 测试Google认证

完成以上步骤后重启项目,重新配置Google OAuth信息并测试认证功能即可。

内容的提问来源于stack exchange,提问作者Tices

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:01:24