[Django3.0] ModelFormのバリデーション

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
自社基本情報の更新までできました。
続いて得意先の登録に行きます。