postgresql 如何在auth_user数据库中创建自定义用户模型?

f0brbegy  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(115)

我在www.example.com文件中添加了这一行settings.py,以便在auth_user数据库中创建一个自定义User模型:AUTH_USER_MODEL = 'main.User'main是我的一个应用程序的名称,它包含了所有的型号)。
但我后来发现,我应该在初始迁移之前这样做,所以当我试图在管理页面中集成Google Authentication时,我收到了这个错误,说明我的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.
我尝试通过在this article上遵循adive来修复这个问题,并清除了我的postgresql数据库沿着迁移文件和pycache。在此之后,我尝试makemigrations并收到此错误:ValueError: The field socialaccount.SocialAccount.user was declared with a lazy reference to 'auth.user', but app 'auth' isn't installed. .然后这个错误当我试图迁移: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',
        }
    }
}

字符串

5n0oy7gb

5n0oy7gb1#

我在this answer上找到了一个解决方案。
我已经撤消了所有迁移,删除了所有/migration文件,并清除了数据库中的所有数据。所以为了解决main_usermain.User的bug,我只需要运行main应用程序来单独进行迁移:

python manage.py makemigrations main

字符串
然后迁移所有更改:

python manage.py migrate


这消除了我之前收到的所有错误,并允许我连接谷歌身份验证,没有进一步的问题。

相关问题