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

React+Django REST Framework无法更新date_of_birth字段求助

React表单添加date_of_birth后无法提交到DRF API的解决方案

你遇到的核心问题是react-datepicker返回的Date对象直接通过FormData提交时,会被序列化为无效的字符串格式,DRF的DateTimeField无法解析这个格式,导致接口验证失败,表单提交受阻。

以下是具体修复步骤:

1. 修复提交时的日期格式转换

在handleSubmit中,将Date对象转换为DRF能识别的ISO 8601格式字符串后,再添加到FormData:

const handleSubmit = async (event) => {
  event.preventDefault();
  const formData = new FormData();
  formData.append("name", name);
  formData.append("location", location);
  formData.append("favourite_location", favourite_location);
  // 关键修复:将Date对象转为ISO字符串,null则跳过或传空值
  if (date_of_birth) {
    formData.append("date_of_birth", date_of_birth.toISOString());
  }
  formData.append("bio", bio);

  // 剩余代码保持不变...
};

2. 处理初始化时的日期格式

从DRF后端获取的date_of_birth是字符串格式,需要转为Date对象才能被react-datepicker正确识别,修改useEffect中的数据赋值逻辑:

setProfileData({
  name,
  location,
  favourite_location,
  date_of_birth: date_of_birth ? new Date(date_of_birth) : null, // 转换为Date对象
  bio,
  image,
});

3. 优化DatePicker组件属性

react-datepicker不需要value属性(它通过selected控制选中值),且rows属性对日期选择器无效,移除冗余属性:

<DatePicker
  selected={date_of_birth}
  onChange={handleDateChange}
  name="date_of_birth"
/>

问题根源说明

当你直接把Date对象通过formData.append("date_of_birth", date_of_birth)添加时,浏览器会自动将Date对象转为[object Date]字符串,DRF的DateTimeField无法解析这个格式,导致接口返回验证错误,表单提交失败。而移除该字段后,其他字段都是字符串格式,能正常被DRF解析,所以提交流程恢复正常。

内容的提问来源于stack exchange,提问作者chris-t93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:39:54