django 1.9: ProgrammingError: отношение "пользователь пользователя" не существует

я сталкиваюсь с ProgrammingError при миграции, я думаю, что это может быть связано с использованием django-allauth с пользовательским пользователем. Вот что я делаю

1 / Создайте новую базу данных с psql:

create database dj_example;

2 / Installed_apps содержат django.ВНО.сайты:

DJANGO_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
)
THIRD_PARTY_APPS = (
'crispy_forms',  # Form layouts
'allauth',  # registration
'allauth.account',  # registration
#'allauth.socialaccount',  # registration
#'allauth.socialaccount.providers.twitter',
'djcelery', #Celery
)
LOCAL_APPS = (
'tucat.users',  # custom users app
}

3/ site_id имеет значение 1

SITE_ID = 1

4 / пользовательская модель пользователя слишком проста:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
  def __unicode__(self):
    return self.username

5 / Makemigrations работает отлично

# python manage.py makemigrations
Migrations for 'djcelery':
  0028_auto_20160601_1919.py:
  - Alter field status on taskmeta

6/ Migrate returns ProgrammingError: отношение "users_user" не существует

# python manage.py migrate
  Operations to perform:
  Apply all migrations: auth, contenttypes, djcelery, account, admin, sessions
  Running migrations:
  Rendering model states... DONE
  Applying account.0001_initial...Traceback (most recent call last):
  File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
  return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation "users_user" does not exist

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "manage.py", line 12, in <module>
  execute_from_command_line(sys.argv)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
  utility.execute()
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/__init__.py", line 345, in execute
  self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
  self.execute(*args, **cmd_options)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/base.py", line 399, in execute
  output = self.handle(*args, **options)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 200, in handle
  executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/migrations/executor.py", line 92, in migrate
  self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
  state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
  state = migration.apply(state, schema_editor)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 90, in __exit__
  self.execute(sql)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 110, in execute
  cursor.execute(sql, params)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py", line 79, in execute
  return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
  return self.cursor.execute(sql, params)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/utils.py", line 95, in __exit__
  six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/utils/six.py", line 685, in reraise
  raise value.with_traceback(tb)
File "/home/antoinet/.virtualenvs/tucat/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
  return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "users_user" does not exist

есть идеи, как решить эту проблему?

3 ответов


ваша ошибка вызвана порядком выполнения миграции. Поскольку многие приложения зависят от существующей модели пользователя, необходимо выполнить первоначальные миграции для пользовательского приложения до других приложений.

Если вы измените модель пользователя по умолчанию в существующем проекте, может быть проще отказаться от всех существующих миграций (и базы данных) и перестроить с нуля. Порядок применения миграций будет следующим:

  1. базовый django.contrib приложения.
  2. ваш пользовательское приложение пользователя.
  3. другие пользовательские приложения и сторонние приложения.

можно использовать django-admin showmigrations чтобы увидеть, какие миграции существуют и планируются.


вы должны удалить папку миграции, а затем, вы должны сделать

python manage.py migrate --run-syncdb

python manage.py migrate --fake appname

к твоему сведению -

У меня была эта проблема, и для ее решения мне пришлось прокомментировать все ссылки на views.py в моей urls.py и url_tenants.py файлы. Затем я запустил makemigrations и получил таблицы базы данных для создания, затем запустите migrate_schemas, а затем раскомментируйте файлы url. Надеюсь, это кому-то поможет.