Djangoでは、Forms.FormのバリデーションとModelFormのバリデーション2種類がある
ModelFormでのバリデーションについて考える。
文字数とnull, Emailは既にモデルに書かれているので、郵便番号を英数字とハイフンだけにする
正規表現で、\d{3}-\d{4}とする
/sales/models.py
from django.db import models
from django.core.validators import RegexValidator
class Master(models.Model):
name = models.CharField(max_length=255)
office = models.CharField(max_length=255, null=True)
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)
mail = models.EmailField(max_length=255)
name_top = models.CharField(max_length=255)
position_top = models.CharField(max_length=100, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
/sales/views.py
def master_complete(request):
data = Master.objects.get(id=1)
if(request.method == 'POST'):
master = MasterForm(request.POST, instance=data)
if(master.is_valid()):
master.save()
return render(request, 'sales/master_complete.html')
else:
params = {
'form': MasterForm(instance=data),
'message': "郵便番号は数字7桁とハイフンで入力してください"
}
return render(request, 'sales/master.html', params)
return render(request, 'sales/master_complete.html')
/sales/templates/sales/master.html
<div class="text-danger">{{ message}}</div>

OK
自社基本情報の更新までできました。
続いて得意先の登録に行きます。