DRF Web界面DateTime格式不匹配致POST请求出错求助
问题解决方法
核心原因
你当前的序列化器仅指定了**输出(序列化)的日期时间格式,未配置输入(反序列化)**时允许的格式。DRF默认只接受YYYY-MM-DDThh:mm:ss.uuuuuu[+HHMM|-HHMM]这类标准格式,无法解析你界面发送的DD-MM-YY --:-- --格式,因此触发报错。
另外,你的序列化器字段列表存在语法错误:insurance_valid_till后缺少逗号,会导致字段解析异常。
具体修改步骤
1. 修复序列化器字段语法错误
在serializer.py的fields元组中,给insurance_valid_till添加末尾逗号:
fields = ('customer_name', 'insurance_id', 'vehicle_number', 'rc_front', 'rc_back', 'nominee_name', 'nominee_dob', 'insurance_created_at', 'insurance_started_at', 'insurance_valid_till', 'is_insurance_verified', 'is_insurance_cancelled')
2. 配置DateTimeField的输入输出格式
修改insurance_started_at和insurance_valid_till字段,添加input_formats参数,指定接受你界面发送的日期时间格式(示例为%d-%m-%y %H:%M %p,对应DD-MM-YY HH:MM AM/PM,可根据你界面的实际格式调整),同时设置输出格式匹配界面显示需求:
from rest_framework import serializers from .models import UserInsuranceModel class UserInsuranceSerializer(serializers.ModelSerializer): insurance_started_at = serializers.DateTimeField( format="%d-%m-%y %H:%M %p", # 界面显示的输出格式 input_formats=["%d-%m-%y %H:%M %p", "%Y-%m-%dT%H:%M:%S.%fZ"] # 兼容界面格式和DRF默认标准格式 ) insurance_valid_till = serializers.DateTimeField( format="%d-%m-%y %H:%M %p", input_formats=["%d-%m-%y %H:%M %p", "%Y-%m-%dT%H:%M:%S.%fZ"] ) class Meta: model = UserInsuranceModel fields = ('customer_name', 'insurance_id', 'vehicle_number', 'rc_front', 'rc_back', 'nominee_name', 'nominee_dob', 'insurance_created_at', 'insurance_started_at', 'insurance_valid_till', 'is_insurance_verified', 'is_insurance_cancelled')
3. 格式参数说明
format:控制API返回给前端的日期时间显示格式,可根据需求调整占位符:%d:两位日期,%m:两位月份,%y:两位年份,%H:24小时制小时,%I:12小时制小时,%M:分钟,%p:AM/PM标识
input_formats:指定序列化器可解析的输入格式,同时保留默认标准格式,确保兼容其他调用场景。
验证修改
重启服务后,在DRF界面提交DD-MM-YY --:-- --格式的日期时间,即可正常通过验证并完成POST请求。
内容的提问来源于stack exchange,提问作者Abhishek Surela
相关产品推荐
相关产品推荐

