Django:在不清除所有数据的情况下更改模型?

Nic*_*ner 16 python django

我有一些模型,我正在使用一个新的Django安装.是否可以在不丢失应用数据的情况下更改字段?

我尝试改变现场并运行python manage.py syncdb.此命令没有输出.

当Django试图显示db中不存在的字段时,导航到管理页面以编辑已更改的模型会导致TemplateSyntaxErrors.

我正在使用SQLite.

我能够删除db文件,然后重新运行python manage.py syncdb,但这有点痛苦.有没有更好的方法呢?

JAL*_*JAL 20

Django永远不会改变现有的数据库列.Syncdb将创建表,但它不会像Rails中那样进行"迁移".如果您需要这样的东西,请查看Django South.

请参阅syndb的文档:

Syncdb不会更改现有表

syncdb仅为尚未安装的模型创建表.它永远不会发出ALTER TABLE语句来匹配安装后对模型类所做的更改.对模型类和数据库模式的更改通常涉及某种形式的歧义,在这些情况下,Django必须猜测要进行的正确更改.存在关键数据在此过程中丢失的风险.

如果您对模型进行了更改并希望更改数据库表以匹配,请使用sql命令显示新的SQL结构,并将其与现有的表模式进行比较以计算更改.

您必须通过sqlite提供的任何管理工具手动更改数据库中的列名称.例如,我已经使用MySQL完成了这项工作,并且由于MySQL允许您在不影响数据的情况下更改列名,因此没有问题.


the*_*row 8

当然有.
看看南方


ano*_*ard 5

如果您只是在谈论添加/删除列,则必须手动更新数据库架构/布局.

如果您尝试重命名列,则必须找到另一种方法.

您可以使用python manage.py sql [app name](http://docs.djangoproject.com/en/dev/ref/django-admin/#sql-appname-appname)命令查看新SQL应该是什么样的,看看哪些列,什么类型/规范Django会添加,然后手动运行相应的ALTER TABLE命令.

有一些应用程序/项目可以实现更轻松的模型/数据库管理,但是Django不会出于目的/设计而开箱即用.