LoginSignup
20
18

More than 5 years have passed since last update.

【Django】電話番号/郵便番号に適したModelを作る

Last updated at Posted at 2017-08-07

Django単体でアプリケーションを作るときはformの方でバリデーションかければいいのかもしれないけれど、Django REST FrameworkとしてAPIの提供を主とする場合、Modelの方でもバリデーションかけたい
以下は電話番号と郵便番号のフィールドに対してバリデーションをかけている例

models.py
from django.db import models
from django.core.validators import RegexValidator

class SampleModel(model.model):
    tel_number_regex = RegexValidator(regex=r'^[0-9]+$', message = ("Tel Number must be entered in the format: '09012345678'. Up to 15 digits allowed."))
    tel_number = models.CharField(validators=[tel_number_regex], max_length=15, verbose_name='電話番号')
    postal_code_regex = RegexValidator(regex=r'^[0-9]+$', message = ("Postal Code must be entered in the format: '1234567'. Up to 7 digits allowed."))
    postal_code = models.CharField(validators=[postal_code_regex], max_length=7, verbose_name='郵便番号') 

このようにすると、正規表現でバリデーションをかけることができる
マッチしないリクエストを送信した場合、それぞれに設定したmessageが返る

ハイフンをつけてレコードを保存したい場合などは、それに適した正規表現をregex=のところに書くと良いです

余談としては本当はそれぞれの正規表現を定義したところでmax_lengthも設定できればよかったんだけれど、それはできなかった

20
18
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18