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

- Python -
2020.02.18
Django

こんな風に、DjangoのモデルでTextFieldを定義していて、

djangoのtextfield

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

djangoのフォーム

この結果テンプレートに表示される「textareaの高さや幅をどうやって変えるのか」という地味な疑問を解決します。

フォームを.forms.ModelFormクラスで作るか、.forms.Formクラスで作るかで若干異なります。

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

forms.ModelFormクラスの場合

以下、8行目以降のようにMetaクラスにwidgets属性を追加することで自由に高さ、幅を変更できるようになります。

class 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

forms.Formクラスの場合

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

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

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