エラーメッセージがあった場合にはforループで回すのが一般的?
モデルで正規表現でカタカナのみ入力可としてる所で、漢字で入力してエラーメッセージを表示させる。
/sales/models.py
class Clients(models.Model): name = models.CharField(max_length=255) name_kana = models.CharField(max_length=255, null=True, blank=True, validators=[RegexValidator(r"\u30A1-\u30F4")]) office = models.CharField(max_length=255, null=True, blank=True) department = models.CharField(max_length=255, null=True, blank=True) position = models.CharField(max_length=255, null=True, blank=True) charge = models.CharField(max_length=255) charge_mail = models.EmailField(max_length=255) zipcode = models.CharField(max_length=8, validators=[RegexValidator(r"\d{3}-\d{4}")]) prefecture = models.CharField(max_length=20) address = models.CharField(max_length=255) tel = models.CharField(max_length=15) fax = models.CharField(max_length=15, null=True, blank=True) name_top = models.CharField(max_length=255) position_top = models.CharField(max_length=100, null=True, blank=True) remark = models.TextField(max_length=300, null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
/templates/sales/client_input.html
{% for error in form.errors %} <div class="text-danger"> {{ error }} </div> {% endfor %}
エラーメッセージを定義していないから、kana_nameだけ表示される。
class ClientsForm(forms.ModelForm): class Meta: model = Clients fields = ['name', 'name_kana', 'office', 'department', 'position', 'charge', 'charge_mail', 'zipcode', 'prefecture', 'address', 'tel', 'fax', 'name_top', 'position_top', 'remark'] def clean_name_kana(self); name_kana = self.cleaned_data['name_kana'] p = u'^[\u30A1-\u30F4]+$' if(re.match(p, name_kana)) raise forms.ValidationError("全角カナで入力してください") return name_kana
上手くいかない。正規表現を変更する。
def clean_name_kana(self): name_kana = self.cleaned_data['name_kana'] p = re.compile('[\u30A1-\u30F4]+') if not(p.fullmatch(name_kana)): raise forms.ValidationError("全角カナで入力してください")
{% for error in form.errors %} <div class="text-danger"> {{ form.name_kana.errors }} </div> {% endfor %}
上手く行ったが、なんかモヤモヤするな。