こんにちは。 露木さんが回答されたように、djangoは、モデルの変更に伴ってデータベースを マイグレーションするためのインタフェースを備えていません。開発者たちは、 モデルレベルの変更がバックエンドDB上でどのような変更に対応するかを、DBに 依存しないやり方で実現するスマートな方法がないので、無理に組み込むのを 諦めているようです。
モデルを修正したあとで、テーブルのスキーマを更新させるには、いくつか方法があります。 [1] まずは、モデルの定義されているアプリケーションをリセットする方法です。 モデルが myapplication アプリで定義されているとして、以下のように実行します。 manage.py reset myapplication ただしこれだと、myapplication で定義されているモデルに対応した全てのテーブルが 削除され、新しいモデル定義に従って再度生成されるので、それまでにアプリケーション に投入したデータは失われてしまいます。 [2] データを一時退避して再度投入したければ、 fixture を使うとよいでしょう。 manage.py dumpdata myapplication これで、 myapplication に投入されているデータが JSON 形式で書き出されます。 アプリケーションをリセットして、simplejson (djangoにバンドルされています) でデータを読み出して投入するスクリプトを書けば、データをリストアできます。 JSON データを新たなモデルのスキーマに合わせて加工すれば、syncdbを使って 直接データを投入できます。 [3] もっと直接的には、ALTER TABLE を使って、DB上で直接テーブルスキーマを 変更します。とはいえ、DBのスキーマが正しくないと、起動時にモデルの検証が できず、djangoが立ち上がらないと新たなモデルがDBのスキーマに正しく対応 しているのかわからないので、いささか骨の折れる作業だと思います。 (スマートにやっている人がいたら、やり方をぜひ教えてください) [メールアドレス保護] さんは書きました: > PHP から移行してきました。一通りチュートリアルを読み終えたところのズブの初心者です。 > CentOS5 python2.4 django 0.96.1 PostgreSQL 8.1 の環境で使用しています。 > > 自作のモデルのメンバ変数を修正後、syncdb したのですが、修正したモデルのテーブルが更新されません。 > いったんデータベースから直接テーブルを削除し、サイド syncdb するときちんと作成されます。 > フィールド自体を変更するようなモデル修正を行った場合、どのようにすればデータベースに反映されるようになるのでしょうか。 > > 以上、よろしくお願いします。 > > > -- Yasushi Masuda http://ymasuda.jp/ --~--~---------~--~----~------------~-------~--~----~ ----------------- http://www.djangoproject.jp/ ----------------- You received this message because you are subscribed to the Google Groups "django-ja" group. To post to this group, send email to django-ja@googlegroups.com To unsubscribe from this group, send email to [メールアドレス保護] For more options, visit this group at http://groups.google.com/group/django-ja -~----------~----~----~----~------~----~------~--~---