web-dev-qa-db-fra.com

django Syncdb et un modèle mis à jour

J'ai récemment mis à jour mon modèle, y ai ajouté un BooleanField. Cependant, lorsque je fais python manage.py syncdb, le nouveau champ n'est pas ajouté à la base de données pour le modèle. Comment puis-je réparer cela ?

85
Hellnar

À partir de Django 1.7

Django a intégré le support pour les migrations - jetez un œil à la documentation .

Pour Django 1.6 et versions antérieures

Django ne prend pas en charge les migrations prêtes à l'emploi. Il existe une application enfichable pour Django qui fait exactement cela et qui fonctionne très bien. Ça s'appelle sud .

100
Dominic Rodger

Django ne le fait actuellement pas automatiquement. Vos options sont:

  1. Supprimez la table de la base de données, puis recréez-la sous une nouvelle forme à l'aide de syncdb.
  2. Imprimez SQL pour la base de données à l'aide de python manage.py sql (appname), recherchez la ligne ajoutée pour le champ et ajoutez-la manuellement à l'aide de la commande alter table SQL. (Cela vous permettra également de choisir les valeurs du champ pour vos enregistrements actuels.)
  3. Utilisez Sud (par réponse de Dominic ).
14
che

Suivez ces étapes:

  1. Exportez vos données vers un appareil en utilisant la commande dumpdata management
  2. Laisser tomber la table
  3. Lancer syncdb
  4. Rechargez vos données depuis la fixture en utilisant la commande loaddata management
11
Soviut

Comme suggéré dans la réponse du haut, j'ai essayé d'utiliser Sud , et après une heure de frustration avec des erreurs de migration obscures a décidé d'aller avec Django Evolution à la place.

Je pense qu’il est plus facile de commencer que South, et cela a parfaitement fonctionné la première fois que j’ai tapé ./manage.py evolve --hint --execute, alors j’en suis heureux.

8
Dan Abramov

Havent a utilisé Django depuis un moment, mais je crois me souvenir que syncdb exécute des commandes de modification sur des tables de base de données. vous devez supprimer la table, puis exécuter à nouveau et il va créer à nouveau.

edit: désolé n'effectue pas alter.

2
Alex H

À Django 1.6

  • Au début, nous avons exécuté - python manage.py sql <app name>

  • Ensuite, nous devons exécuter - python manage.py syncdb

1

Si vous utilisez Django avec Apache et MySQL, redémarrez Apache après avoir effectué la migration avec makemigrations .

0
Felipe Perry