django - 模式迁移 - 如何添加字段

时间:2015-06-23 18:47:52

标签: django

我有一个使用db的django 1.8应用程序。 我尝试使用内置迁移来更改表的架构。 以下是我所做的步骤:

在我的开发环境中,我抓住了应用源并运行了

python manage.py sycdb
然后我跑了

python manage.py loaddata ~/my_data.json

然后我修改了modes.py。添加了一个字段并重命名了一个字段...所有这些都来自同一个表格< strong> TABLE1 '没有数据。

然后

python manage.py makemigrations myapp
python manage.py migrate

错误:django.db.utils.OperationalError:table" myapp_someother_table"已存在

然后跑了

python manage.py migrate --fake-initial

工作! 但当我浏览 TABLE1 的管理页面时,我收到此错误:

OperationalError:没有这样的列:myapp_table1.my_new_field_id

我检查了数据库,是的,没有这样的列。 我怎么能从这里开始?我更喜欢通过django解决这个问题。 如果我在数据库中直接修复它,那么迁移就会失去同步。

3 个答案:

答案 0 :(得分:1)

迁移不会自动发现您已进行更改。迁移通过将当前模型与迁移文件中保存的历史模型进行比较来检测更改。

在这种情况下,您没有任何历史模型,因为您没有任何迁移。 Django无法检测到模型中的任何变化,即使它们与您的数据库不同。

更改模型的正确方法是首先运行manage.py makemigration <my_app>然后对模型进行更改,然后是另一个{{ 1}}。

答案 1 :(得分:0)

您可能无法通过纯django 保留您的数据。我没有south的个人经验,但有很多提及这个工具。万一其他任何事都不适合你...

答案 2 :(得分:0)

以下是我所做的工作,但必须有更好的方法,所以请添加更多答案/评论......

  1. 我删除了sqlite数据库和迁移文件夹
  2. 我对model.py
  3. 进行了所需的更改
  4. 运行syncdb
  5. 运行loaddata以加载我之前保存过的json数据转储。
  6. 刚刚启动了dev服务器