J'ai récemment mis Django à niveau vers la version 1.8 et mis en place une nouvelle base de données de développement pour un nouveau départ. Les migrations et les dépendances se sont bien déroulées, sauf les erreurs habituelles que vous obtenez et vous finissez par résoudre. L'application fonctionne localement maintenant très bien.Problème de test de Django 1.8: ProgrammingError: la relation "auth_user" n'existe pas
Cependant, je reçois une erreur lors d'une tentative d'exécuter des tests:
python manage.py test
C'est l'erreur que je reçois:
django.db.utils.ProgrammingError: relation "auth_user" does not exist
Inutile de dire que le module auth de Django est en effet installé et migré dans l'application, donc je ne suis pas sûr de ce qui se passe.
est ici plein stacktrace si vous avez besoin de jeter un regard à elle, mais il does't dire quoi que ce soit, même à distance utile pour moi de comprendre la cause de cette erreur:
Traceback (most recent call last):
File "C:/Users/dabadaba/PycharmProjects/dogpatchsports_com/mysite/manage_sched_dev.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\__init__.py", line 354, in execute_from_command_line
utility.execute()
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\test.py", line 30, in run_from_argv
super(Command, self).run_from_argv(argv)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\test.py", line 74, in execute
super(Command, self).execute(*args, **options)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\base.py", line 445, in execute
output = self.handle(*args, **options)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\test.py", line 90, in handle
failures = test_runner.run_tests(test_labels)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\test\runner.py", line 210, in run_tests
old_config = self.setup_databases()
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\test\runner.py", line 166, in setup_databases
**kwargs
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\test\runner.py", line 370, in setup_databases
serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True),
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\db\backends\base\creation.py", line 368, in create_test_db
test_flush=not keepdb,
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\__init__.py", line 120, in call_command
return command.execute(*args, **defaults)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\base.py", line 445, in execute
output = self.handle(*args, **options)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\migrate.py", line 179, in handle
created_models = self.sync_apps(connection, executor.loader.unmigrated_apps)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\migrate.py", line 318, in sync_apps
cursor.execute(statement)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\db\utils.py", line 98, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Users\dabadaba\Envs\django18\lib\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
Je peux comprendre une solution de contournement suivant this answer qui empêche la tâche de test d'exécuter migrate
, qui selon ce que j'ai lu devrait être le point où l'erreur se produit. Assez étrange, puisque quand je cours migrate
tout va bien.
Cependant, je préférerais ne pas recourir à une solution de contournement effrontée et s'en tenir à faire les choses comme ils sont conçus. En outre, cette erreur peut être un indice que quelque chose d'autre est réellement faux et devrait être corrigé.
Certaines solutions suggèrent en marche:
python manage.py migrate auth
python manage.py migrate
Mais cela ne fait rien car il n'y a pas de migration en attente dans mon projet.
Comment puis-je résoudre ce problème mystérieux?
Eh bien, ils ont cette dépendance apparemment 'migrations.swappable_dependency (settings.AUTH_USER_MODEL) ' – dabadaba
Avez-vous un modèle utilisateur personnalisé? – Alasdair
afaik nous utilisons des utilisateurs natifs de Django. Mais voici la chose que je viens de découvrir, pensez-vous que c'est bizarre ?: C'est un attribut dans l'un de nos modèles: 'admins = models.ManyToManyField ('auth.User')'. Ensuite, à partir du shell, je reçois une instance de ce modèle à partir de la base de données, et j'imprime le type 'instance.admins.first()', qui affiche ce que j'attendais 'django.contrib.auth.models.User'. Alors comment se fait-il que l'attribut est défini comme 'auth.User'? Peut-être que c'est une erreur reportée par notre mise à jour Django? Mais comment les migrations ont-elles fonctionné en premier lieu? Vois-tu quelque chose de bizarre ici? – dabadaba