naritoブログ

このブログはDjangoとBootstrap4で作成されました
ソースコード

Django、モデルフィールド→フォームフィールド一覧表

プログラミング関連 Django Python 約21日前
2017年12月31日23:27
DjangoでModelFormを使うと、モデルを基にフォームのフィールドが作成されていきます。
ほとんどの場合、それらは同じ名前のフィールドです。
モデルでmodels.CharFieldがあれば、フォームでもforms.CharFieldが使われます。

しかし、違うものもあります。models.TextFieldは、forms.CharFieldに対応します。(widgetがforms.Textarea になる)
今回は、それらをパッと確認できるための一覧表を作成しました。あくまでモデルのフィールドに対応したフォームのフィールドなので、いくつかのフォームフィールドは出てきていません。
フォームウィジェットのいくつかは交換できることも覚えておきましょう。
Django2.0を基にしています。
モデルフィールド フォームフィールド フォームウィジェット タグ
BigIntegerField IntegerField NumberInput or TextInput input type="number" or type="text"
BooleanField BooleanField CheckboxInput input type="checkbox"
CharField CharField TextInput input type="text"
DateField DateField DateInput input type="text"
DateTimeField DateTimeField DateTimeInput input type="text"
DecimalField DecimalField NumberInput or TextInput input type="number" or type="text"
EmailField EmailField EmaiiInput input type="email"
FileField FileField ClearableFileInput input type="file"
FilePathField FilePathField Select select
FloatField FloatField NumberInput or TextInput input type="number" or type="text"
ForeignKey ModelChoiceField Select select
ImageField ImageField ClearableFileInput input type="file"
IntegerField IntegerField NumberInput or TextInput input type="number" or type="text"
GenericIPAddressField GenericIPAddressField TextInput input type="text"
ManyToManyField ModelMultipleChoiceField SelectMultiple select multiple="multiple"
NullBooleanField NullBooleanField NullBooleanSelect select
PositiveIntegerField IntegerField NumberInput or TextInput input type="number" or type="text"
PositiveSmallIntegerField IntegerField NumberInput or TextInput input type="number" or type="text"
PositiveSmallIntegerField IntegerField NumberInput or TextInput input type="number" or type="text"
SlugField SlugField TextInput input type="text"
SmallIntegerField IntegerField NumberInput or TextInput input type="number" or type="text"
TextField CharField Textarea textarea
TimeField TimeField Textinput input type="text"
URLField URLField URLInput input type="url"



これに加えて、いくつかのルールがあります。
・モデルフィールドにblank=Trueとした場合、フォームフィールドはrequiredがFalse に
・フォームフィールドのlabelは、モデルフィールドのverbose_nameの最初の文字を大文字にしたもの(日本語なら関係なし)
・フォームフィールドのhelp_textはモデルフィールドの help_textに
・models.CharField(choices=...)のようなモデルフィールドは、Selectウィジェットになり、結果的にselectタグになる。空の選択肢が追加されるが、これを表示させたくない場合はdefault引数を指定する

モデルフィールドによって決定されるデフォルトのフォームフィールドを変更するには、関連記事の「Djangoで、ModelForm、Formのあれこれ」をご覧ください。

https://docs.djangoproject.com/ja/2.0/topics/forms/modelforms/
https://docs.djangoproject.com/ja/2.0/ref/forms/fields/
https://docs.djangoproject.com/ja/2.0/ref/forms/widgets/