2015-12-15 3 views
0

Я пытаюсь запустить «manage.py тест», но я получаю следующее сообщение об ошибке:Django 1.8.3 тест выполняется программа по созданию базы данных

(env)[email protected]:~/Documents/repo/cloud/webapp$ python manage.py test 
Creating test database for alias 'default'... 
Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/home/user/.virtualenvs/env/local/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 "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 393, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 74, in execute 
    super(Command, self).execute(*args, **options) 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute 
    output = self.handle(*args, **options) 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 90, in handle 
    failures = test_runner.run_tests(test_labels) 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/test/runner.py", line 210, in run_tests 
    old_config = self.setup_databases() 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/test/runner.py", line 166, in setup_databases 
    **kwargs 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/test/runner.py", line 370, in setup_databases 
    serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True), 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/db/backends/base/creation.py", line 368, in create_test_db 
    test_flush=not keepdb, 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 120, in call_command 
    return command.execute(*args, **defaults) 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute 
    output = self.handle(*args, **options) 
    File "/home/user/.virtualenvs/env/local/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 "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 317, in sync_apps 
    cursor.execute(statement) 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/home/user/.virtualenvs/env/local/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/home/user/.virtualenvs/env/local/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 переносит ваше приложение до того, как оно перенесет auth, что вызывает ошибку, поскольку пользовательская модель моделирует модель auth.user. Однако я не нашел для этого исправления.

ответ

1

У вас есть модель в приложении без миграций, с внешним ключом до auth.User. Как отмечено в the docs:

Обратите внимание, однако, что unmigrated приложение не может зависеть от мигрировавших приложений, по самой природе, не имея миграцию. Это означает, что, как правило, невозможно, чтобы у немигрированного приложения было приложение ForeignKey или ManyToManyField для перенесенного приложения; некоторые случаи могут работать, но в конечном итоге это не удастся.

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

+0

По-видимому, я забыл о двух приложениях в своем проекте, которые я не переносил, и это было причиной неудачи. Дело в том, что Django не переносит эти приложения при запуске миграции manage.py, поэтому я должен был сделать это вручную. Благодаря ! – Ethan

0

Попробуйте выполнить следующие команды первым:

$ python manage.py makemigrations 
$ python manage.py migrate 
$ python manage.py syncdb 

Если вы сделаете какие-либо изменения в определения модели в models.py вы должны запускать SQL запросы миграции, чтобы переместить базы данных в новую модель.