J'ai récemment mis à jour mon modèle, y ai ajouté un BooleanField, mais lorsque je le fais python manage.py syncdb
, il n'ajoute pas le nouveau champ à la base de données du modèle. Comment puis-je réparer cela ?
J'ai récemment mis à jour mon modèle, y ai ajouté un BooleanField, mais lorsque je le fais python manage.py syncdb
, il n'ajoute pas le nouveau champ à la base de données du modèle. Comment puis-je réparer cela ?
Réponses:
Django a intégré la prise en charge des migrations - jetez un œil à la documentation .
Django ne prend pas en charge les migrations hors de la boîte. Il existe une application enfichable pour Django qui fait exactement cela, et cela fonctionne très bien. Ça s'appelle Sud .
Django ne le fait actuellement pas automatiquement. Vos options sont:
python manage.py sql (appname)
, recherchez la ligne ajoutée pour le champ et ajoutez-la manuellement à l'aide de la alter table
commande SQL. (Cela vous permettra également de choisir les valeurs du champ pour vos enregistrements actuels.)Comme suggéré dans la première réponse, j'ai essayé d'utiliser South , et après une heure de frustration avec d' obscures erreurs de migration , j'ai décidé d'utiliser Django Evolution à la place.
Je pense que c'est plus facile de commencer avec que South, et cela a parfaitement fonctionné la première fois que j'ai tapé ./manage.py evolve --hint --execute
, donc j'en suis content.
Havent a utilisé django pendant un certain temps, mais il me semble que je me souviens que syncdb exécute des commandes alter sur les tables db. vous devez supprimer la table puis la relancer et elle se créera à nouveau.
edit: désolé n'effectue PAS de modification.
alter table
commandes, mais d'exécuter des create table
commandes.
Dans django 1.6
Au début, nous avons couru - python manage.py sql <app name>
Ensuite, nous devons courir - python manage.py syncdb
Si vous exécutez Django avec Apache et MySQL, redémarrez apache après avoir effectué la migration avec makemigrations .