У меня есть следующие модели:Джанго ManyToMany связь с django.contrib.auth.models.User
class BM(models.Model):
created_date = models.DateTimeField(auto_now_add=True, editable=False)
birth_date = models.DateTimeField(null=False, blank=False)
name = models.CharField(null=False, blank=False, max_length = 255)
relations = models.ManyToManyField(User)
Когда я пытаюсь запустить тест с python manage.py test
я получаю следующее сообщение об ошибке:
django.db.utils.ProgrammingError: relation "auth_user" does not exist
Это связано с попыткой создать отношение к таблице пользователя до того, как таблица будет создана сама.
Как это сделать?
Edited сказать:
Это происходит потому, что модель таблицы BM
создается перед столом аутентификации пользователя, поэтому следующий оператор выполняется (в соответствии с ./manage sqlall p
:
CREATE TABLE "p_baby_relations" (
"id" serial NOT NULL PRIMARY KEY,
"baby_id" integer NOT NULL,
"user_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED,
UNIQUE ("baby_id", "user_id")
)
;
Ошибка из-за NOT NULL REFERENCES "auth_user"
, что означает, что таблица польз не была создана
трассировки стека:.
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 330, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 30, in run_from_argv
super(Command, self).run_from_argv(argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 390, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 74, in execute
super(Command, self).execute(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 441, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/test.py", line 90, in handle
failures = test_runner.run_tests(test_labels)
File "/usr/local/lib/python2.7/dist-packages/django/test/runner.py", line 210, in run_tests
old_config = self.setup_databases()
File "/usr/local/lib/python2.7/dist-packages/django/test/runner.py", line 166, in setup_databases
**kwargs
File "/usr/local/lib/python2.7/dist-packages/django/test/runner.py", line 370, in setup_databases
serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True),
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/creation.py", line 368, in create_test_db
test_flush=not keepdb,
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 120, in call_command
return command.execute(*args, **defaults)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 441, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 179, in handle
created_models = self.sync_apps(connection, executor.loader.unmigrated_apps)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 317, in sync_apps
cursor.execute(statement)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/local/lib/python2.7/dist-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
Вы запустили makemigrations и мигрировали? – dietbacon
попробуйте запустить manage.py makemigrations 'app_name' этого класса BM –
Я запускаю тестовый набор – mikeb