python - "django.db.utils.ProgrammingError: relation "app_user" does not exist" during manage.py test -


my setup:

  • django 1.8.3
  • python 2.7.10
  • ubuntu 14.04
  • django-two-factor-auth==1.2.0

i following error when run python manage.py test:

traceback (most recent call last):   file "/src/venv/bin/django-admin.py", line 5, in <module>     management.execute_from_command_line()   file "/src/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line     utility.execute()   file "/src/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 "/src/venv/lib/python2.7/site-packages/django/core/management/commands/test.py", line 30, in run_from_argv     super(command, self).run_from_argv(argv)   file "/src/venv/lib/python2.7/site-packages/django/core/management/base.py", line 393, in run_from_argv     self.execute(*args, **cmd_options)   file "/src/venv/lib/python2.7/site-packages/django/core/management/commands/test.py", line 74, in execute     super(command, self).execute(*args, **options)   file "/src/venv/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute     output = self.handle(*args, **options)   file "/src/venv/lib/python2.7/site-packages/django/core/management/commands/test.py", line 90, in handle     failures = test_runner.run_tests(test_labels)   file "/src/venv/lib/python2.7/site-packages/django/test/runner.py", line 210, in run_tests     old_config = self.setup_databases()   file "/src/venv/lib/python2.7/site-packages/django/test/runner.py", line 166, in setup_databases     **kwargs   file "/src/venv/lib/python2.7/site-packages/django/test/runner.py", line 370, in setup_databases     serialize=connection.settings_dict.get("test", {}).get("serialize", true),   file "/src/venv/lib/python2.7/site-packages/django/db/backends/base/creation.py", line 368, in create_test_db     test_flush=not keepdb,   file "/src/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 120, in call_command     return command.execute(*args, **defaults)   file "/src/venv/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute     output = self.handle(*args, **options)   file "/src/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 "/src/venv/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 317, in sync_apps     cursor.execute(statement)   file "/src/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute     return self.cursor.execute(sql, params)   file "/src/venv/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__     six.reraise(dj_exc_type, dj_exc_value, traceback)   file "/src/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 63, in execute     return self.cursor.execute(sql) django.db.utils.programmingerror: relation "app_user" not exist 

when drop print(sql) statement on line 62 in django/db/backends/utils.py, following output:

create database "test_dev"              select c.relname, c.relkind             pg_catalog.pg_class c             left join pg_catalog.pg_namespace n on n.oid = c.relnamespace             c.relkind in ('r', 'v')                 , n.nspname not in ('pg_catalog', 'pg_toast')                 , pg_catalog.pg_table_is_visible(c.oid) create table "django_migrations" ("id" serial not null primary key, "app" varchar(255) not null, "name" varchar(255) not null, "applied" timestamp time zone not null)              select c.relname, c.relkind             pg_catalog.pg_class c             left join pg_catalog.pg_namespace n on n.oid = c.relnamespace             c.relkind in ('r', 'v')                 , n.nspname not in ('pg_catalog', 'pg_toast')                 , pg_catalog.pg_table_is_visible(c.oid) savepoint "s140275211773760_x1" create table "distributedlock_lock" ("id" serial not null primary key, "key" varchar(255) not null, "value" varchar(255) not null, "timestamp" timestamp time zone null) release savepoint "s140275211773760_x1" savepoint "s140275211773760_x2" create table "djkombu_queue" ("id" serial not null primary key, "name" varchar(200) not null unique) release savepoint "s140275211773760_x2" savepoint "s140275211773760_x3" create table "djkombu_message" ("id" serial not null primary key, "visible" boolean not null, "sent_at" timestamp time zone null, "payload" text not null, "queue_id" integer not null) release savepoint "s140275211773760_x3" savepoint "s140275211773760_x4" create table "otp_static_staticdevice" ("id" serial not null primary key, "user_id" integer not null, "name" varchar(64) not null, "confirmed" boolean not null) release savepoint "s140275211773760_x4" savepoint "s140275211773760_x5" create table "otp_static_statictoken" ("id" serial not null primary key, "device_id" integer not null, "token" varchar(16) not null) release savepoint "s140275211773760_x5" savepoint "s140275211773760_x6" create table "otp_totp_totpdevice" ("id" serial not null primary key, "user_id" integer not null, "name" varchar(64) not null, "confirmed" boolean not null, "key" varchar(80) not null, "step" smallint not null check ("step" >= 0), "t0" bigint not null, "digits" smallint not null check ("digits" >= 0), "tolerance" smallint not null check ("tolerance" >= 0), "drift" smallint not null, "last_t" bigint not null) release savepoint "s140275211773760_x6" create index "djkombu_queue_name_1c24e49fd475ad53_like" on "djkombu_queue" ("name" varchar_pattern_ops) alter table "djkombu_message" add constraint "djkombu_message_queue_id_12778caea7843dd_fk_djkombu_queue_id" foreign key ("queue_id") references "djkombu_queue" ("id") deferrable deferred create index "djkombu_message_46cf0e59" on "djkombu_message" ("visible") create index "djkombu_message_df2f2974" on "djkombu_message" ("sent_at") create index "djkombu_message_75249aa1" on "djkombu_message" ("queue_id") alter table "otp_static_staticdevice" add constraint "otp_static_staticdevice_user_id_39a61f1bd3ec970d_fk_app_user_id" foreign key ("user_id") references "ff_user" ("id") deferrable deferred 

so clear me tests blow while test database being setup. specifically, attempt create foreign key constraint between otp_static_staticdevice table , app's app_user table fails.

my immediate question is, why django create otp table before app's table? assumption otp app listed first in installed_apps. not case:

installed_apps = [     'django.contrib.auth',     'django.contrib.contenttypes',     'django.contrib.sessions',     'django.contrib.sites',     'django.contrib.messages',     'django.contrib.staticfiles',     'django.contrib.admin',     'django.contrib.humanize',     'app',     ...     'django_otp',     'django_otp.plugins.otp_static',     'django_otp.plugins.otp_totp',     'two_factor',     ... ] 

next, @ django/core/management/commands/migrate.py, trying find out how django determines order migrating apps.

plopping pdb.set_trace() statement on line 264 (https://github.com/django/django/blob/1.8.3/django/core/management/commands/migrate.py#l264) , looking see app_labels contains, get:

set(['djangosaml2', 'django_ace', 'recurly', 'staticfiles', 'distributedlock', 'app_overrides', 'messages', 'django_otp', 'kombu_transport_django', 'otp_totp', 'compressor', 'otp_static', 'humanize', 'ajax_select', 'django_extensions', 'import_export', 'raven_compat', 'crispy_forms', 'emoji']) 

this far have gotten before decided ask help. know how django might end not creating project's apps in correct order decency conflicts not occur?

got same issue, , since happens on ./manage.py test, migrations may broken.
since django 1.7, there new setting called migration_modules, in configure app's migration modules.
adding following workaround in settings.py (found here) skips migrations on tests, , solved me:

class disablemigrations(object):      def __contains__(self, item):         return true      def __getitem__(self, item):         return "notmigrations"  migration_modules = disablemigrations() 

Comments