Djangoでモデル定義から直接フォームクラスを自動生成する方法については、ModelFormクラスを用いればよいと解説してきました。
ModelFormカテゴリの記事一覧
しかし、モデルではフィールド定義してるけど、フォームを表示する際は表示する必要のないものや、ヘルプメッセージをどうやって表示すればよいのか?など、使うときに迷うこともあります。
今回は、このような細やかな要求をどうやって実現するのかについて、ノウハウメモ的に解説していきます。
Djangoは、クラス定義(モデル)とデータベーステーブルとを関連付けるORM(Object-Relation Model)というフレームワークを採用しています。そのため、SQLやRDBのことが分からなくても、Python & Djangoの知識だけである程度データベースを利用することができます。
データベースとしては、PostgreSQL / MYSQL / Sqlite などが利用可能ですが、これらすべてが既存のテーブルに対して、カラムの追加・変更・削除処理をサポートしている訳ではありません。例えば、PostgreSQLはカラムの追加はできますが、変更(型や名前の変更など)はできません。
これらは、サポートしているデータベースが提供しているサービスで、共通部分のみしか使わないというDjangoの思想に基づいています。なので、モデル定義の変更・削除も同様に、
$ python manage.py syncdb
では対応できないのです。
これを解決するためのDjangoアプリケーションがあります。
「django-evolution」です。
これを使えば、モデルの変更・削除が実現できます。
関連記事
Djangoでモデルを定義しても、特段ユーザが明示しない限りインデックスが付与されることは ありません。インデックスがデフォルトで付与されているのは暗黙のカラムの「id」カラムだけです。