8

我重写了很多模型,因为我只是在运行一个测试服务器,所以我使用 ./manage.py reset myapp 来重置数据库表,一切正常。

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

“完整错误:关系“myapp_tagger”的约束 owner_id_refs_id_9036cedd 不存在”

所以我想我会核对整个网站并重新开始。所以我做了。 . 我认为flush应该删除所有表。syncdb 说没有添加任何装置。

我认为该错误与我将标记器模型更改为具有与另一个对象绑定的名称所有者的外键有关。

我尝试将related_name 添加到外键参数中,但似乎没有任何效果。

4

1 回答 1

17

我认为flush应该删除所有表。

不。根据文档manage.py flush不会删除表格。相反,它执行以下操作:

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

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

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

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

  1. 删除数据库并重新发布manage.py syncdb。这是我在开发数据库模式时使用的过程。我使用了一个 initial_data 夹具来安装一些测试数据,当数据库模式发生变化时也需要更新这些数据。
  2. 手动发出 SQL 命令来修改您的数据库模式。
  3. 使用
于 2010-12-29T00:54:48.143 回答