Django Rest Framework配置DD-MM-YYYY日期输入格式不生效求助
问题根因
你配置的DRF全局DATE_INPUT_FORMATS参数仅对DRF序列化器生效,当前视图直接从request.POST提取参数传给Django模型,走的是Django原生DateField的默认格式校验逻辑,和DRF配置无关,因此配置不生效。
解决方案
方案1:使用DRF序列化器(推荐)
这是DRF框架的标准用法,可直接复用你已加的全局配置:
- 首先在应用目录新增
serializers.py文件,代码如下:
from rest_framework import serializers from .models import MasterIndividualMembers class MasterIndividualMembersSerializer(serializers.ModelSerializer): # 若已在settings.py配置全局DATE_INPUT_FORMATS,可省略input_formats参数 birth_date = serializers.DateField(input_formats=["%d-%m-%Y"]) class Meta: model = MasterIndividualMembers fields = ["firstname", "lastname", "birth_date"]
- 调整
views.py代码,使用序列化器做参数校验和数据保存:
from rest_framework.decorators import api_view from rest_framework.response import Response from .serializers import MasterIndividualMembersSerializer @api_view(["POST"]) def create_individual_member(request): serializer = MasterIndividualMembersSerializer(data=request.data) # 自动校验参数格式,格式错误会直接返回对应报错 serializer.is_valid(raise_exception=True) serializer.save() return Response({"status": "success", "msg": "成员创建完成"})
方案2:手动解析日期(无需调整现有架构)
如果不想引入DRF序列化器,可直接将拿到的日期字符串按格式解析为日期对象后再传入模型:
修改views.py代码:
from datetime import datetime from django.http import JsonResponse def create_individual_member(request): if request.method == "POST": firstname = request.POST.get('firstname') lastname = request.POST.get('lastname') birth_date_str = request.POST.get('birth_date') try: # 手动按DD-MM-YYYY格式解析日期字符串 birth_date = datetime.strptime(birth_date_str, "%d-%m-%Y").date() except ValueError: return JsonResponse({"status": "error", "msg": "日期格式错误,请使用DD-MM-YYYY格式"}, status=400) individual_member = MasterIndividualMembers( firstname = firstname, lastname = lastname, birth_date = birth_date, ) individual_member.save() return JsonResponse({"status": "success", "msg": "成员创建完成"})
补充说明
如果需要同时支持多种日期输入格式,可在DATE_INPUT_FORMATS列表中添加所有需要的格式,例如["%d-%m-%Y", "%Y-%m-%d"],框架会按顺序尝试匹配解析。
内容的提问来源于stack exchange,提问作者ank
相关产品推荐
相关产品推荐

