web-dev-qa-db-ja.com

django syncdbと更新されたモデル

私は最近モデルを更新し、BooleanFieldを追加しましたが、python manage.py syncdb、モデルのデータベースに新しいフィールドを追加しません。どうすれば修正できますか?

85
Hellnar

からDjango 1.7以降

Djangoには、移行のサポートが組み込まれています- ドキュメント をご覧ください。

Django 1.6およびそれ以前

Djangoは、すぐに使用できる移行をサポートしていません。 Djangoのプラグイン可能なアプリがありますが、それはまさにそれを実行し、それは素晴らしい動作をします。 South と呼ばれます。

100
Dominic Rodger

Djangoは現在、これを自動的に行いません。オプションは次のとおりです。

  1. データベースからテーブルを削除し、syncdbを使用して新しい形式で再作成します。
  2. python manage.py sql (appname)を使用してデータベースのSQLを出力し、フィールドに追加された行を見つけて、alter table SQLコマンドを使用して手動で追加します。 (これにより、現在のレコードのフィールドの値を選択することもできます。)
  3. SouthDominic's answer )を使用します。
14
che

次の手順を実行します:

  1. dumpdata 管理コマンドを使用して、データをフィクスチャにエクスポートします
  2. テーブルをドロップする
  3. Syncdbを実行する
  4. loaddata 管理コマンドを使用してフィクスチャからデータをリロードします
11
Soviut

トップアンサーで提案されているように、 South を使用してみましたが、 obscure migration errors でフラストレーションが1時間続いた後、代わりに Django Evolution を使用することにしました。

始めるのは南よりも簡単だと思います。また、最初に./manage.py evolve --hint --executeので、私はそれに満足しています。

8
Dan Abramov

Havent used Django=ですが、syncdbはdbテーブルでalterコマンドを実行することを覚えているようです。

編集:申し訳ありませんが変更を実行しません。

2
Alex H

In Django 1.6

  • 最初に実行しました-python manage.py sql <app name>

  • 次に、実行する必要があります-python manage.py syncdb

ApacheとMySQLでDjangoを実行する場合は、makemigrationsで移行を行った後にApacheを再起動します。

0
Felipe Perry