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

时间:2010-12-28 23:34:29

标签: 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参数中,似乎没有任何工作。

1 个答案:

答案 0 :(得分:13)

  

我认为同花顺应该放弃所有牌桌。

没有。根据{{​​3}},manage.py flush不会删除表格。相反,它执行以下操作:

  

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

如“对数据库架构进行更改”部分中的documentation所述,

  

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

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

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