clean関数の結果を比較する
formsでのバリデーションを行う方法として、
- Djangoのバリデーション
required 文字数
- 独自バリデーション
clean_フィールド名関数を実装する。
複数フィールドを組み合わせたバリデーション。
この3種類がある。
参考
<html> <body> <form action="" method="post"> {% csrf_token %} {% if form.errors %} {% for errors in form.errors.values %} {% for error in errors %} {{ error }}<br> {% endfor %} {% endfor %} {% endif %} {% for field in form %} <div> {{ field.label_tag }} </div> <div> {{ field }} </div> {% endfor %} <button type="submit">送信</button> </form> </body> </html>
次にforms.pyを追加する。
from django import forms from django.core import validators from . import models class ProductForm(forms.Form): name = forms.ModelChoiceField(models.Product.objects, label='商品', to_field_name='code') product = forms.CharField(required=False, validators=[validators.MaxLengthValidator(10)]) # clean_product関数 def clean_product(self): product = self.cleaned_data['product'] if len(product) > 5: raise forms.ValidationError("productのエラー") return product # clean関数 def clean(self): clean_data = super().clean() return cleaned_data
ここで、3箇所バリデーション行っている。
いずれも実行ボタンを押した時に発行されるエラーは画面に表示されるものであった。
次はエラーの種類を大まかに実装してみたいと思う。