2011-02-03 5 views
7

Je suis nouveau dans le monde django. Exécution de certaines applications de tutoriel, et lors de l'exécution de test python manage.py j'obtiens un échec disant que la table existe déjà. Je ne suis pas sûr de ce qui se passe. Je cours aussi vers le sud, et je n'ai eu aucune erreur lors de la migration du schéma.django - "manage.py test" échoue "la table existe déjà"

Toute idée est grandement appréciée.

TIA Joey

+0

Peut-être lié: http://stackoverflow.com/questions/3090648/django-south-table-already-exists – payne

+0

OUI! C'est comme ça que j'ai fait quelques erreurs et que la migration n'a pas été synchronisée avec le db. Des installations propres l'ont corrigé. –

Répondre

15

Il est peut-être une erreur dans l'un de vos migrations sud. Vous ne voyez pas le problème sur la base de données réelle car la migration a été exécutée (avec l'option - fake peut-être)

Vous pouvez essayer de recréer la base de données à partir de scracth et de voir si cela fonctionne.

Vous pouvez également désactiver Sud pour les tests unitaires en ajoutant SOUTH_TESTS_MIGRATE = False dans votre settings.py. Avec cette option, une syncdb régulière sera effectuée pour créer la base de données de test. Cela accélérera également le processus de test.

J'espère que cela aide

+0

réponse très perspicace! –

+0

si je dois dessiner db à partir de zéro alors quel est l'avantage de South? – Ahsan

+0

@Ahsan la base de données est créée à partir de zéro uniquement pour les tests et cela se passe de cette façon que vous utilisiez ou non South. –

0

et si vous testez avec le nez:

DST_RUN_SOUTH_MIGRATIONS = False

0

Cela se produit également avec le nez quand
--cover-package=userdata,incorrectname
un du nom de package est incorrect

1

Cela m'est également arrivé avec un code hérité, mais pour une autre raison.

J'avais deux modèles avec db_table faisant référence à la même table db. Je sais que c'est stupide, mais ce n'est pas de ma faute)

Et je n'ai jamais rien trouvé sur internet qui pourrait m'aider. J'ai été sauvé par la verbosité fixée à 3 (manage.py test -v 3) J'espère que cela aidera n'importe qui.

class Bla1(Model): 
    some_column = ... 
    class Meta: 
     db_table = 'some_table' 

class Bla2(Model): 
    some_column = ... 
    class Meta: 
     db_table = 'some_table' 
Questions connexes