8

多くのモデルを書き直しました。テスト サーバーを実行しているだけなので、./manage.py reset myapp を実行して db テーブルをリセットすると、すべて正常に動作しています。

今回やってみたらエラーが出て、

「完全なエラー: リレーション「myapp_tagger」の制約 owner_id_refs_id_9036cedd は存在しません」

だから私は、サイト全体を核攻撃して、新たに始めることにしました。だから私は ./manage.py をフラッシュし、syncdb を実行しましたが、これはエラーを発生させず、すべてのデータを削除しましたが、my_app のオブジェクトにアクセスしようとすると、列が見つからないというエラーが発生するため、データベースは更新されませんでした. フラッシュはすべてのテーブルを削除するはずだと思いました。syncdb は、フィクスチャが追加されていないことを示しています。

このエラーは、タグ付けモデルを、別のオブジェクトに関連付けられた名前の所有者を持つ外部キーを持つように変更したという事実に関連していると思います。

related_name をforeignkey引数に追加しようとしましたが、何も機能していないようです。

4

1 に答える 1

17

フラッシュはすべてのテーブルを削除するはずだと思いました。

いいえ。ドキュメントによると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 に答える