Django:flush命令没有完全清除数据库,重置失败

Dan*_*Man 8 django django-models schema-migration

我重写了很多我的模型,因为我只是运行一个测试服务器,我做./manage.py重置myapp来重置db表,一切都运行正常.

但这次我试着这样做,我得到一个错误,

"myapp_tagger"关系的"完整错误:contraint owner_id_refs_id_9036cedd"不存在"

所以我想我会把整个网站搞得一团糟,重新开始.所以我做了./manage.py flush然后做了一个syncdb这没有引发错误并删除了我的所有数据,但是它没有更新数据库,因为当我尝试访问任何my_app的对象时,我得到一个列未找到错误.我认为同花顺应该放弃所有桌子.syncdb表示没有添加任何灯具.

我假设错误与我将标记器模型更改为具有名称所有者绑定到另一个对象的外键的事实有关.

我已经尝试将related_name添加到foreignkey参数,似乎没有任何工作.

Mat*_*kin 13

我认为同花顺应该放弃所有桌子.

不.根据文档,manage.py flush不要丢弃表格.相反,它执行以下操作:

在syncdb执行后立即将数据库返回到它所处的状态.这意味着将从数据库中删除所有数据,将重新执行任何后同步处理程序,并将重新安装initial_data fixture.

"Django Book " 第10章 "对数据库模式进行更改"部分所述,

syncdb仅创建数据库中尚不存在的表 - 它不会同步模型中的更改或执行模型删除.如果添加或更改模型的字段,或者删除模型,则需要手动在数据库中进行更改.

因此,要解决您的问题,您需要:

  1. 删除数据库并重新发出manage.py syncdb.这是我在开发数据库模式时使用的过程.我使用initial_data fixture来安装一些测试数据,当数据库模式发生变化时也需要更新.
  2. 手动发出SQL命令以修改数据库模式.
  3. 使用.

  • +1 re:南方.能够在不丢失数据的情况下更改架构真是太神奇了. (6认同)