フィールド - Django

CharField

CharField で指定できる引数には次のようなものがあります。

引数 内容
required 必須項目。真偽値で指定。True なら必須項目
min_length, max_length 最小文字数、最大文字数を指定。整数値で指定。

次の場合だと、name フィールドは、必須項目で2文字以上15文字以下という内容です。

forms.CharField(label='name', required=True, min_length=3, max_length=15)

EmailField

EmailField で指定できる引数には次のようなものがあります。

引数 内容
required 必須項目。真偽値で指定。True なら必須項目
min_length, max_length 最小文字数、最大文字数を指定。整数値で指定。
forms.EmailField(label='mail', required=True, min_length=3, max_length=15)

IntegerField

IntegerField で指定できる引数には次のようなものがあります。

引数 内容
required 必須項目。真偽値で指定。True なら必須項目
min_value, max_value 最小値・最大値を整数値で指定。
forms.IntegerField(label='age', required=True, min_value=1, max_value=100)

FloatField

FloatField は、実数を扱うことができます。

FloatField で指定できる引数には次のようなものがあります。

引数 内容
required 必須項目。真偽値で指定。True なら必須項目
min_value, max_value 最小値・最大値を整数値で指定。
forms.FloatField(label='age', required=True, min_value=0, max_value=10)

URLField

URLField で指定できる引数には次のようなものがあります。

引数 内容
required 必須項目。真偽値で指定。True なら必須項目
min_length, max_length 最小文字数、最大文字数を指定。整数値で指定。
forms.URLField(label='url', required=True, min_length=20, max_length=100)

DateField

DateField で指定できる引数には次のようなものがあります。

引数 内容
input_formats 日付の形式を指定します。リスト形式で複数の形式を設定可能。
error_messages 特定のバリデーションエラーに対してカスタムエラーメッセージを設定できます。
widget フォームフィールドのHTML表現を決定するウィジェット

DateFieldを type=date にするには、次のようにします。

date = forms.DateField(
  widget=forms.DateInput(attrs={"type":"date"}),
)

DateTimeField

DateTimeField で指定できる引数には次のようなものがあります。

引数 内容
input_formats 日付の形式を指定します。リスト形式で複数の形式を設定可能。
error_messages 特定のバリデーションエラーに対してカスタムエラーメッセージを設定できます。
widget フォームフィールドのHTML表現を決定するウィジェット

DateFieldを type=date にするには、次のようにします。

forms.DateTimeField(
  widget=forms.DateTimeInput(attrs={"type":"datetime-local"}),
)

チェックボックス

チェックボックスは、チェックなしの状態だと、未入力扱いになるため、「 required=False 」を指定しておきます。

pythonApp\env\django_app\hello\forms.py

from django import forms

class HelloForm(forms.Form):
  check = forms.BooleanField(label='Checkbox', required=False)

pythonApp\env\django_app\hello\views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import HelloForm

# Create your views here.
class HelloView(TemplateView):
  def __init__(self):
    self.params = {
      'message:': 'your data:',
      'form': HelloForm()
    }
  
  def get(self, request):
    return render(request, 'hello/index.html', self.params)

  def post(self, request):
    if('check' in request.POST):
      self.params['value'] = 'check:' + request.POST['check']
    else:
      self.params['value'] = 'Not checked...'
    
    self.params['form'] = HelloForm(request.POST)
    return render(request, 'hello/index.html', self.params)

pythonApp\env\django_app\hello\templates\hello\index.html

{% load static %}
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="{% static 'hello/css/style.css' %}">
  <title>Document</title>
</head>
<body>
  <h1>hello/index</h1>
  <p>{{ value|safe }}</p>
  <form action="{% url 'index' %}" method="post">
    {% csrf_token %}
    {{ form.as_ul }}
    <li><input type="submit" value="click"></li>
  </form>
  
</body>
</html>

NullBooleanField

NullBooleanField は、3択を示すプルダウンメニューを作成します。

プルダウンメニューの表示は、「 Yes 」、「 No 」、「 unknown 」の3つです。

それぞれの value 属性の値は、「 Yes = true 」、「 No = false 」、「 unknown = unknown 」

pythonApp\env\django_app\hello\forms.py

from django import forms

class HelloForm(forms.Form):
  check = forms.NullBooleanField(label='check')

pythonApp\env\django_app\hello\views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import HelloForm

# Create your views here.
class HelloView(TemplateView):
  def __init__(self):
    self.params = {
      'message:': 'your data:',
      'value': None,
      'form': HelloForm()
    }
  
  def get(self, request):
    return render(request, 'hello/index.html', self.params)

  def post(self, request):
    self.params['value'] = 'check:' + request.POST['check']
    
    self.params['form'] = HelloForm(request.POST)
    return render(request, 'hello/index.html', self.params)

ChoiceField

ChoiceField は、プルダウンメニューを作成します。

pythonApp\env\django_app\hello\forms.py

from django import forms

class HelloForm(forms.Form):
  data = [
    ('one', 'item1'),
    ('two', 'item2'),
    ('three', 'item3')
  ]
  choice = forms.ChoiceField(label='choice', choices=data)

pythonApp\env\django_app\hello\views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import HelloForm

# Create your views here.
class HelloView(TemplateView):
  def __init__(self):
    self.params = {
      'message:': 'your data:',
      'value': None,
      'form': HelloForm()
    }
  
  def get(self, request):
    return render(request, 'hello/index.html', self.params)

  def post(self, request):
    self.params['value'] = 'choice:' + request.POST['choice']
    
    self.params['form'] = HelloForm(request.POST)
    return render(request, 'hello/index.html', self.params)

ラジオボタン

ラジオボタンについては、フィールドクラスがないため、ChoiceField を使って作成します。

pythonApp\env\django_app\hello\forms.py

from django import forms

class HelloForm(forms.Form):
  data = [
    ('one', 'item1'),
    ('two', 'item2'),
    ('three', 'item3')
  ]
  radio = forms.ChoiceField(label='radio', choices=data, widget=forms.RadioSelect())

pythonApp\env\django_app\hello\views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import HelloForm

# Create your views here.
class HelloView(TemplateView):
  def __init__(self):
    self.params = {
      'message:': 'your data:',
      'value': None,
      'form': HelloForm()
    }
  
  def get(self, request):
    return render(request, 'hello/index.html', self.params)

  def post(self, request):
    self.params['value'] = 'radio:' + request.POST['radio']
    
    self.params['form'] = HelloForm(request.POST)
    return render(request, 'hello/index.html', self.params)

複数選択可能なチェックボックス

pythonApp\env\django_app\hello\forms.py

from django import forms

class HelloForm(forms.Form):
  data = [
    ('one', 'item1'),
    ('two', 'item2'),
    ('three', 'item3')
  ]
  check = forms.MultipleChoiceField(label='check', choices=data, widget=forms.CheckboxSelectMultiple, required=False)

pythonApp\env\django_app\hello\views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import HelloForm

# Create your views here.
class HelloView(TemplateView):
  def __init__(self):
    self.params = {
      'message:': 'your data:',
      'value': None,
      'form': HelloForm()
    }
  
  def get(self, request):
    return render(request, 'hello/index.html', self.params)

  def post(self, request):
    self.params['value'] = request.POST.getlist('check')
    
    self.params['form'] = HelloForm(request.POST)
    return render(request, 'hello/index.html', self.params)