django syncdb and an updated model
I have recently updated my model, added a BooleanField to it however when I do python manage.py syncdb
, it doesn't add the new field to the database for the model. How can I fix this ?
Solution 1:
From Django 1.7 onwards
Django has built in support for migrations - take a look at the documentation.
For Django 1.6 and earlier
Django doesn't support migrations out of the box. There is a pluggable app for Django that does exactly that though, and it works great. It's called South.
Solution 2:
Django currently does not do this automatically. Your options are:
- Drop the table from the database, then recreate it in new form using syncdb.
- Print out SQL for the database using
python manage.py sql (appname)
, find the added line for the field and add it manually usingalter table
SQL command. (This will also allow you to choose values of the field for your current records.) - Use South (per Dominic's answer).
Solution 3:
Follow these steps:
- Export your data to a fixture using the dumpdata management command
- Drop the table
- Run syncdb
- Reload your data from the fixture using the loaddata management command
Solution 4:
As suggested in top answer, I tried using South, and after an hour of frustration with obscure migration errors decided to go with Django Evolution instead.
I think it's easier to get started with than South, and it worked perfectly the first time I typed ./manage.py evolve --hint --execute
, so I'm happy with it.
Solution 5:
Havent used django in a while, but i seem to remember that syncdb does perform alter commands on db tables. you have to drop the table then run again and it will create again.
edit: sorry does NOT perform alter.