DjangoのFormについて
applicationフォルダ配下にforms.pyを作る。
フォームを定義するには
のどちらかを使う。
django.forms.ModelFormの方が、既存Modelを流用できるため楽に書ける。
django.forms.Formを使った場合。
forms.py
from django import forms class TestForm(forms.Form): name = forms.CharField(label="name", max_length=20) age = forms.IntegerField() message = forms.CharField(label="message", max_length=50)
django.forms.ModelFormを使った場合。
forms.py
from django import forms from .models import ModelName class TestForm(forms.ModelForm): class Meta: model = ModelName fields = ("name", "age", "message")
ModelFormの方が書きやすいが、バリデーションを考えるとFormも書きやすい?
applicationフォルダ配下にvalidate.pyを作成
validate.py
from django.core.exceptions import ValidationError # ここでは引数の文字列に指定するものがあればバリデーションエラーを発生させる def test_validation(msg): if "##" in msg: raise ValidationError(f"{##}が入っているため使えません")
forms.py
from django import forms from .validate import test_validation class SomeForm(forms.Form): item = forms.CharField(label="item_name", validators=[test_validation], max_length=10)
ModelFormの方は、既存Modelにオプションとして付与する。
models.py
from django.db import models from .validate import test_validation class Some(models.Model): item = models.CharField(max_length=10, validators=[test_validation])