2017-10-13 19 views
0

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?

Répondre

1

Si vous avez des applications qui ont des clés étrangères à auth.User, assurez-vous que les migrations initiales pour ces applications ont un dependency sur l'application auth:

class Migration(migrations.Migration): 

    dependencies = [('auth', '__first__')] 
+0

Eh bien, ils ont cette dépendance apparemment 'migrations.swappable_dependency (settings.AUTH_USER_MODEL) ' – dabadaba

+0

Avez-vous un modèle utilisateur personnalisé? – Alasdair

+0

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