Django Rest FrameworkのDateTimeFieldは、django.utils.dateparse.parse_datetime
の使用により、rfc 3339 datetime値を完全に解析することができます(それはやや寛大ですが、問題ありません)。
parse_datetime
は、タイムゾーン対応のdatetimeインスタンス(固定オフセットにtzinfo zetを使用)または単純なdatetimeインスタンス(tzinfoなし)を戻します。
settings.USE_TZ
が設定されているか、フィールドにdefault_timezone
引数の値が指定されている場合、Django Rest FrameworkのDateTimeFieldは任意の値を認識日時値に変換します。そうでない場合は、値はナイーブになります。
DateTimeFieldのenforce_timezone
メソッドは、値を認識しやすくするために使用します。 、値が解析され施行がenforce_timezone
をオーバーライドし、解析された日時の値がナイーブである場合ValidationError
を上昇させることによって達成することができる認識タイムゾーンする必要があり、これを知る
:
from django.utils import timezone
class DateTimeFieldWithOffset(serializers.DateTimeField):
default_error_messages = {
'naive': 'Datetime value is missing a timezone offset.'
}
def enforce_timezone(self, value):
if timezone.is_naive(value):
self.fail('naive')
return super().enforce_timezone(value)