DRF中UTC时间格式验证:强制用户输入指定UTC格式
解决DRF序列化器DateTimeField强制UTC格式的问题
嗨,我来帮你搞定这个问题!你遇到的错误是因为input_formats里的格式字符串用错了——你写的YYYY-MM-DDThh:mm:ssZ是占位符样式,而DRF需要的是Python datetime模块支持的strftime格式符号。
正确的设置方式
把input_formats里的格式改成Python认可的格式字符串就行,针对你想要的2018-04-16T14:18:15Z格式,对应的字符串是'%Y-%m-%dT%H:%M:%SZ'。
直接上代码示例:
from rest_framework import serializers class YourSerializer(serializers.ModelSerializer): # 也可以用Serializer,根据你的场景选择 end_date = serializers.DateTimeField(input_formats=['%Y-%m-%dT%H:%M:%SZ']) class Meta: model = YourModel fields = ['end_date', ...]
额外补充:支持带毫秒的UTC格式
如果你的场景还需要接受带毫秒的格式(比如2018-04-16T14:18:15.123Z),可以把对应的格式也加入input_formats列表:
end_date = serializers.DateTimeField( input_formats=['%Y-%m-%dT%H:%M:%SZ', '%Y-%m-%dT%H:%M:%S.%fZ'] )
为什么之前会报错?
DRF默认的DateTimeField格式包含了带时区偏移的样式(比如+HH:MM),但你想要强制用户输入带Z后缀的UTC时间,必须明确指定input_formats。之前错误的格式字符串让DRF无法识别你要的规则,所以返回了默认的格式提示。
现在设置正确的格式后,当用户输入不符合指定格式的时间时,错误提示就会显示你要求的格式规则了。
内容的提问来源于stack exchange,提问作者Anish
相关产品推荐
相关产品推荐

