1

orgname = models.CharField(max_length=50)models.py の既存のクラスに追加して実行python manage.py syncdbしましたが、列が作成されないことがわかりました (ちなみに PostgreSQL を使用しています) python manage.py sqlall <myapp>

BEGIN;
CREATE TABLE "file_uploader_files" (
    "id" serial NOT NULL PRIMARY KEY,
    "file" varchar(100) NOT NULL,
    "orgname" varchar(50) NOT NULL
)
;
COMMIT;

しかし、Django のシェルにアクセスしたり、pgAdmin3 を調べたりしても、列はまだ作成されていません。私は何を間違っていますか?手動で追加しますが、方法がわかりません。

PSテーブルは事前に作成されており、varcharファイルも作成されていました.orgnameは、最初にその列を作成した後に付けられました。

4

2 に答える 2

2

のドキュメントは次のようにsqlall command述べています。

指定されたアプリ名のCREATETABLEおよび初期データSQLステートメントを出力します。

SQLを出力し、何も実行しません。Djangoがスキーマを変更することはありません。自分で変更する必要があります。上記の出力は、orgnameフィールドのタイプを表示するのに役立ちます。または、Southのようなものを使用します。

于 2012-09-18T08:19:38.693 に答える
1

この SO の質問も参照してください:既存のモデルの変更を反映するように django データベースを更新します(上位 2 つの回答があなたの質問をカバーしています)。

受け入れられた答えから:

注: syncdb は既存のテーブルを更新できません。何をすべきかを自動的に決定することが不可能な場合もあります。それが、サウス スクリプトが優れている理由です。

そして他の別の答えで...

python manage.py reset <your_app>

これにより、アプリのデータベース テーブルが更新されますが、それらのテーブルに存在するデータは完全に破棄されます。

于 2012-09-18T08:27:52.590 に答える