【Django】TextFieldフォームのデフォルト幅や高さを変える

- Python -
2020.05.05
Django

こんな風に、Djangoのモデルでdescriptionという名前のTextFieldを定義していて、

djangoのtextfield

こんな風に、ModelFormを作ったはいいものの、

djangoのフォーム

この結果テンプレートに表示されるdescriptionの「textareaの高さや幅をどうやって変えるのか」という地味な疑問がわいたので、調べた結果をメモ。

DjangoのTextFieldフォームのデフォルト幅や高さを変えるには

フォームをどちらのクラスで作るかによって若干の違いがあります。

  1. .forms.ModelFormクラスで作る
  2. .forms.Formクラスで作る

1. forms.ModelFormクラスの場合

以下、8行目以降を参照してください。

このように、Metaクラスにwidgets属性を追加してrows、colsの値を変更することで自由に高さ、幅を変更できるようになります。

forms.pyclass ArticleForm(ModelForm):

    class Meta:
        model = Article
        fields = ['slug', 'title', 'content',
                  'category', 'status', 'description']

        ### 追加 ###
        widgets = {
            'description': forms.Textarea(attrs={'rows':4, 'cols':15}),
        }

参考公式ドキュメント:Overriding the default fields

2. forms.Formクラスの場合

以下のようにwidgetを設定します。

forms.pyclass CommentForm(forms.Form):
    comment = forms.CharField(widget=forms.Textarea(attrs={'cols': '80', 'rows': '10'}))

参考公式ドキュメント:Styling widget instances

↑TOP