エラーメッセージがあった場合には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 %}
上手く行ったが、なんかモヤモヤするな。
