django 1.8无法django.db.utils.ProgrammingError:关系"auth_user"不存在

max*_*max 18 django django-models

我有一个django 1.7的工作项目,现在我把它移到django 1.8.我可以syncdb用sqlite运行应用程序,但是当我切换到postgres时,它无法执行syncdb:

  Creating tables...
    Creating table x
    Creating table y
    Running deferred SQL...
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "~/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "~/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "~/venv/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv
    self.execute(*args, **cmd_options)
  File "~/venv/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute
    output = self.handle(*args, **options)
  File "~/venv/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 25, in handle
    call_command("migrate", **options)
  File "~/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 120, in call_command
    return command.execute(*args, **defaults)
  File "~/venv/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute
    output = self.handle(*args, **options)
  File "~/venv/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 "~/venv/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 317, in sync_apps
    cursor.execute(statement)
  File "~/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "~/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "~/venv/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "~/venv/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
Run Code Online (Sandbox Code Playgroud)

我尝试删除数据库并重新创建它.另外,我试过:

python manage.py migrate auth
Run Code Online (Sandbox Code Playgroud)

也失败了:

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

LINE 1: SELECT (1) AS "a" FROM "django_site" LIMIT 1
Run Code Online (Sandbox Code Playgroud)

请帮忙解决这个问题.

FSp*_*FSp 13

我不喜欢评论/取消注释代码的想法,所以我尝试了一种不同的方法:我"手动"迁移了一些应用程序,然后运行django-admin.py migrate其余的应用程序.删除所有*.pyc文件后,我的命令序列是:

$ django-admin.py migrate auth
$ django-admin.py migrate contentypes
$ django-admin.py migrate sites
$ django-admin.py migrate MY_CUSTOM_USER_APP
$ django-admin.py migrate
Run Code Online (Sandbox Code Playgroud)

这里MY_CUSTOM_USER_APP是包含我设置模型的应用程序的名称AUTH_USER_MODEL,我到settings文件中.

希望它可以提供帮助.顺便说一下,在Django 1.8中同步你的数据库的最佳方法是如此复杂,这似乎很奇怪.我想知道我是否遗漏了一些东西(我不熟悉Django 1.8,我曾经使用旧版本)


Mud*_*hmi 7

始终使用python manage.py makemigrations然后python manage.py migrate在较新版本中迁移db .对于上述错误,如果您第一次迁移数据库,请使用python manage.py migrate --fake-initial.请参阅docs https://docs.djangoproject.com/en/1.9/ref/django-admin/#django-admin-migrate


one*_*sec 6

我遇到了同样的问题,我花了好几个小时努力寻找解决方案,这隐藏在评论中。我的问题是 CircleCI 由于此错误而无法运行测试。我想我需要从一个新的空数据库重新开始。但我遇到了同样的错误。一切似乎都与“身份验证”、“内容类型”和“站点”有关。

我读了这个这个,还有这个,还有这个。没有一个对我来说是解决方案。

因此,在破坏了我的数据库并创建了一个新数据库之后,我发现完全避免这些的唯一解决方案django.db.utils.ProgrammingError是:

  1. 注释掉与User模型相关的所有代码。
  2. 删除我项目中的所有 .pyc 文件!find . -name "*.pyc" -exec rm -- {} +谢谢@max!
  3. 运行./manage.py migrate(没有假的,没有假的初始,没有'auth'或'contenttypes'之前的迁移,juste plain migrate。
  4. 取消注释上面的代码,然后再次运行迁移!

我的 INSTALLED_APP 如下:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'django.contrib.sites',
    'django.contrib.auth',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'mptt',
    'djangobower',
    'honeypot',
    'django_hosts',
    'leaflet',
    'multiselectfield',
    'corsheaders',
    'rest_framework_swagger',
    'allauth',
    'allauth.account',
    # 'allauth.socialaccount',
    # 'allauth.socialaccount.providers.twitter',
    # 'allauth.socialaccount.providers.facebook',
    'project.<app_name>',
)
Run Code Online (Sandbox Code Playgroud)


小智 5

在Django 1.10上工作我找到了另一个解决方案:我的应用程序名为"web",我首先调用:

python manage.py makemigrations web
Run Code Online (Sandbox Code Playgroud)

然后我打电话给:

python manage.py makemigrations auth
Run Code Online (Sandbox Code Playgroud)

然后我打电话给:

python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

惊讶:它在工作!:)似乎auth正在搜索AUTH_USER_MODEL"web.UserProfile"和一个名为web_user_profile的关系,它没有找到它,因此错误.另一方面,在auth能够检查并警告它不存在之前,首先调用makemigrations web首先创建所需的关系.