django syncdb和更新的模型

Hel*_*nar 85 python django django-models

我最近更新了我的模型,为它添加了一个BooleanField,但是当我这样做时python manage.py syncdb,它不会将新字段添加到模型的数据库中.我怎样才能解决这个问题 ?

Dom*_*ger 100

从Django 1.7开始

Django已经内置了对迁移的支持 - 请查看文档.

对于Django 1.6及更早版本

Django不支持开箱即用的迁移.Django有一个可插拔的应用程序可以做到这一点,而且效果很好.它被称为南方.


che*_*che 14

Django目前不会自动执行此操作.你的选择是:

  1. 从数据库中删除表,然后使用syncdb以新的形式重新创建它.
  2. 使用打印出数据库的SQL python manage.py sql (appname),找到该字段的添加行并使用alter tableSQL命令手动添加.(这也允许您为当前记录选择字段的值.)
  3. 使用South(根据Dominic的回答).


Sov*_*iut 11

跟着这些步骤:

  1. 使用dumpdata管理命令将数据导出到夹具
  2. 放下桌子
  3. 运行syncdb
  4. 使用loaddata管理命令从夹具重新加载数据

  • 它是一个简单的管理命令,而不是迁移套件!Django没有办法预测你的数据如何变化或如何保存它所以它坚持你自己做.如果您不喜欢它,请使用像South这样的迁移工具. (3认同)

Dan*_*mov 8

正如在最佳答案中所建议的那样,我尝试使用South,并且在经历了一个小时的晦涩的迁移错误后,决定使用Django Evolution.

我认为开始比南方更容易,并且在我第一次键入时它完美地工作./manage.py evolve --hint --execute,所以我很高兴.

  • 在使用Django Evolution和South近一年后,我改变了我的观点.南方很棒.但它在某种意义上非常像Git**你必须确保*真的*了解它是如何工作的**.如果你盲目地输入命令,那么当你或团队中的某个人第一次犯错时,你很可能会搞砸. (7认同)