フォームは、フォーム画面で入力された値をフォームオブジェクトに変換、保持します。

フォーム

入力値のチェックもおこないます。

公式ドキュメント

フォームの定義

フォームはModelFormクラスを継承する方法と、Formクラスを継承する方法があります。

このチュートリアルでは、Form クラスを継承する方法で実装します。

シンプルなフォーム処理をする場合

  • ModelForm クラスを継承
    • 簡単に書ける
    • デフォルトでバリデーションをしてくれる

複雑なフォーム処理をする場合

  • Form クラスを継承
    • フィールドを 1 つずつ定義する
    • バリデーションは定義する

フォームのフィールドクラス

フィールドクラスにはウィジェットが設定されています。

ウィジェットはフィールドのタイプやデザインをまとめたものです。

フィールドクラス タイプ
CharField TextInput
IntegerField NumberInput
ChoiceField Select
DataField DataInput
DataTimeField DataTimeInput
EmailField EmailInput
FileField ClearableFileInput
ImageField ClearableFileInput

バリデーション追加

  • validators を使用
  • clean_<フィールド名>メソッドを使用
  • clean メソッドを使用

フォームを作成

forms.py ファイルを追加します。

app
   └── forms.py

app/forms.py

from django import forms


class PostForm(forms.Form):
    title = forms.CharField(max_length=30, label='タイトル')
    content = forms.CharField(label='内容', widget=forms.Textarea())

コード解説

一行のフォームを想定する場合は、CharFieldを使用します。

max_lengthで最大文字数を指定します。

title = forms.CharField(max_length=30, label='タイトル')

複数行のフォームを想定する場合は、CharFieldの引数にwidget=forms.Textarea()のウィジェットを追加します。

content = forms.CharField(label='内容', widget=forms.Textarea())