You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:06:01