DjangoのmodelFormを使ったHTMLのフォームで項目名を変える方法

▼この記事をSNSでシェアする▼

スポンサーリンク

スポンサーリンク

ちょっとフォームの設定でつまづいたので備忘録残しておきます。

modelFormを使わない場合

label属性指定でOK

djangoフォームとかで検索すると、フォームのラベル名を指定するのにforms.pyで label属性を指定する記事がある。

forms.Formをクラス指定する場合はこんな感じで大丈夫です。

modelFormを使う場合

注意

modelFormを使った場合は訳が違ってくる。

modelFormはmodels.pyで定義しているmodelをインポートしてformを作れる便利な機能です。

当然フォームとして使用する項目を制限したりできる。

ただmodelFormを使わない例とは違い、forms.py ではフォームの条件等を指定せずmodels.pyの設定がforms.pyに引き継がれる。

たとえばmodels.pyで主キーを設定し、forms.pyにインポートするとその項目は必須かつ一意の入力でない場合バリデーションエラーが出る(便利だけど少しわかりにくい)

modelsFormを使う場合はあらかじめフォームの入力項目を想定した上で設計等を進めないといけないです。

models.pyでverbose_nameを指定する

設定方法は簡単です。

formsで「model = 〜」で指定しているmodelの項目名で編集したい項目で以下のように指定します。

models.*Field(verbose_name=’設定したい項目名’)

models.py

この設定により、フォームはこのようになります。

以前は画像名のところに「Name」、加工したい画像のところに「Img」とmodelの属性名が定義通り表示されていましたが変わりました。

verbose_nameはモデルの表示名を決める属性ですので、adminページでの表示も当然変わります。

実装イメージ

参考までに一応関連するソースも載せておきます。

models.pyについては上記参照

models.pyを編集したらmigrateし直してサーバー再起動したらいい感じにフォームが編集できているはず

forms.py

fields属性でフォームに用いるmodelの項目名を選択できます。

upload.html

17-32行目でフォームの設定をしていますが、21行目だけ注目すればいいです。

form.as_pと書くことでdjangoのフォームAPIがHTMlLに描画する際にpタグを用いてフォームを変換してくれます。

まとめ

フォームAPIなんとなく便利なのはわかるんですが、全然慣れないですね・・・

modelを流用して、データの処理が楽にはなるのですが、フォームにCSS指定する際の クラス指定とか調べたらちょっと面倒な感じでした。

スポンサーリンク


関連記事

▼この記事をSNSでシェアする▼

フォローする

メニュー・主な記事カテゴリ

おすすめ特集!




「ゆとり鳥日記」について
ITを中心に関心の赴くままに好きなように書いていく雑記ブログ!管理人が二人います。
◆フクロウ(ITコンサル)
◆santaka(SE)

詳しいプロフィール
お仕事の依頼・ご要望

ゆとり鳥日記をBTCで応援する