【Django】DateField・DateTimeFieldチェックでフォーマットエラーになってしまう場合の対応方法

DjangoでDateField・DateTimeFieldのチェックがバリデーションエラーになってしまう場合の対応方法です。

事象

DateFieldの日付フォーマットチェックで、指定したフォーマット(%Y/%m/%d)で入力したが、バリデーションチェックでエラーになる。

原因

Djangoの日付チェックで使用される「DATE_INPUT_FORMATS」に「’%Y/%m/%d’」が無いのが原因。

django/conf/global_settings.pyから一部抜粋

DATE_INPUT_FORMATS = [
    "%Y-%m-%d",  # '2006-10-25'
    "%m/%d/%Y",  # '10/25/2006'
    "%m/%d/%y",  # '10/25/06'
    "%b %d %Y",  # 'Oct 25 2006'
    "%b %d, %Y",  # 'Oct 25, 2006'
    "%d %b %Y",  # '25 Oct 2006'
    "%d %b, %Y",  # '25 Oct, 2006'
    "%B %d %Y",  # 'October 25 2006'
    "%B %d, %Y",  # 'October 25, 2006'
    "%d %B %Y",  # '25 October 2006'
    "%d %B, %Y",  # '25 October, 2006'
]

DATETIME_INPUT_FORMATS = [
    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
    "%m/%d/%Y %H:%M:%S",  # '10/25/2006 14:30:59'
    "%m/%d/%Y %H:%M:%S.%f",  # '10/25/2006 14:30:59.000200'
    "%m/%d/%Y %H:%M",  # '10/25/2006 14:30'
    "%m/%d/%y %H:%M:%S",  # '10/25/06 14:30:59'
    "%m/%d/%y %H:%M:%S.%f",  # '10/25/06 14:30:59.000200'
    "%m/%d/%y %H:%M",  # '10/25/06 14:30'
]

対処方法

プロジェクトの「setting.py」に設定を追加して対処します。

# 日付フォーマット追加
from django.conf.global_settings import DATETIME_INPUT_FORMATS, DATE_INPUT_FORMATS

DATE_INPUT_FORMATS += ('%Y/%m/%d',)
DATETIME_INPUT_FORMATS += [
    '%Y/%m/%d',
    '%Y/%m/%d %H:%M:%S',
]

「DATE_INPUT_FORMATS」以外に、「DATETIME_INPUT_FORMATS」も「%Y/%m/%d」でバリデーションエラーにならないように設定。