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