为什么我在一个新创建的安装了“registration redux”应用程序的django项目上运行“migrate”时会出现“auth_user does not exist“错误?

f45qwnt8  于 2023-05-30  发布在  Go
关注(0)|答案(8)|浏览(101)

给定一个新创建的django项目,其中安装了以下应用程序:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'registration',
)

当我第一次运行./manage.py migrate时,我得到以下错误:

Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages, registration
  Apply all migrations: sessions, admin, auth, contenttypes
Synchronizing apps without migrations:
  Creating tables...
    Creating table registration_registrationprofile
    Running deferred SQL...
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute
    output = self.handle(*args, **options)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 179, in handle
    created_models = self.sync_apps(connection, executor.loader.unmigrated_apps)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 317, in sync_apps
    cursor.execute(statement)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/tcosta/Virtualenvs/django_project/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
django.db.utils.ProgrammingError: relation "auth_user" does not exist```

Django似乎试图在用户表之前创建注册表。
如果我注解注册应用程序并运行migrate,然后取消注解注册应用程序并再次运行migrate,则不会发生这种错误。但是,这不是正确的做法,对吗?

mitkmikd

mitkmikd1#

在更新我的Django版本后,我得到了这个错误,并修复了这两行:

python manage.py migrate auth
python manage.py migrate

我想应该先运行auth模型中的auth_user表。

xzlaal3s

xzlaal3s2#

如果你按照Pedro瓦格纳的建议(auth_user error with Django 1.8 and syncdb / migrate)去做,这个问题就可以避免:
通过运行以下命令,确保所有应用程序都存在初始迁移文件:

manage.py makemigrations my_app

我不仅会为那些依赖auth的人做这件事,因为我认为这个问题更普遍。
在我看来,这种行为的根本原因是

manage.py makemigrations

并不总是创建初始迁移,如果它们还没有在那里,* 相反 *:

manage.py makemigrations my_app

不幸的是,我无法理解这种不对称的原因。

ukqbszuj

ukqbszuj3#

我想你只是忘了迁移你的auth模型。但是,要做到这一点,只需在您的终端上键入以下命令。

python manage.py migrate

或者是

python manage.py migrate auth

希望这解决了你在程序中的错误。

qyyhg6bp

qyyhg6bp4#

我觉得你应该跑:
python manage.py syncdb
并且可能需要设置一些依赖项?在syncdb之后可能不需要。

南1风格(Django < 1.7)

class Migration:

    depends_on = (
        ("accounts", "0001"),
    )

    def forwards(self):
        ....

南2风格(Django >= 1.7)

from django.db import migrations, models

class Migration(migrations.Migration):

    dependencies = [("accounts", "0001")]
emeijp43

emeijp435#

为应用创建迁移后,它将自动添加必要的依赖项。所以在这个例子中,只运行./manage.py makemigrations registration
请检查registration/migrations/0001_initial.py文件,您应该会看到如下内容:

dependencies = [
    migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

这意味着您需要为具有任何依赖关系的所有应用创建迁移。

zi8p0yeb

zi8p0yeb6#

我也有这个问题,通过将旧的注册替换为包含pull #25的注册来解决它:

pip install git+https://github.com/macropin/django-registration.git@v1.2c0
zqdjd7g9

zqdjd7g97#

在我的例子中,这个问题已经解决了,在INSTALLED_APPS中重新添加了一些已经删除的模块。因此,数据库中的一些表混淆了迁移方案,然后破坏了test命令,因为默认数据库包含以前的迁移。
修复了在我的例子中重新添加模块allauth和其他相关子模块的问题。

bxjv4tth

bxjv4tth8#

您尚未迁移模型
python manage.py makemigrations my_app_name
对于Mac OS
python3 manage.py makemigrations my_app

相关问题