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

Flutter向Django API提交日期数据报错,请求格式该如何处理?

解决方案

问题核心是Flutter的DateTime对象无法直接被JSON序列化,而Django的DateField仅接受ISO 8601标准的日期字符串(格式为YYYY-MM-DD)。你需要在发送请求前将DateTime对象转换为对应格式的字符串,具体方法如下:

1. 手动转换日期格式

构造请求数据时,直接提取DateTime对象的年月日并拼接成标准格式:

// 假设dateOfBirth、dateOfContamination是DateTime类型变量
final requestData = {
  "username": "test_user",
  "password": "test_pass",
  "date_of_birth": "${dateOfBirth.year}-${dateOfBirth.month.toString().padLeft(2, '0')}-${dateOfBirth.day.toString().padLeft(2, '0')}",
  "date_of_contamination": dateOfContamination.toIso8601String().split('T')[0], // 截取ISO字符串的日期部分
  // 其他字段...
};

// 用Dio发送POST请求
final response = await dio.post('/api/users/', data: requestData);

2. 使用intl包简化格式化

如果手动拼接太繁琐,可以借助Flutter的intl工具包快速格式化:

  1. 在pubspec.yaml中添加依赖:
dependencies:
  intl: ^0.18.1
  1. 导入并使用DateFormat类:
import 'package:intl/intl.dart';

final dateFormatter = DateFormat('yyyy-MM-dd');
final requestData = {
  // ...其他字段
  "date_of_birth": dateFormatter.format(dateOfBirth),
  "date_of_contamination": dateFormatter.format(dateOfContamination),
};

关键提示

Postman能正常请求,本质是你在Postman中提交的是YYYY-MM-DD格式的字符串,而非DateTime对象。只要Flutter端发送的日期字符串格式和Postman一致,Django的CreateUserSerializer就能正确解析。

内容的提问来源于stack exchange,提问作者Mikelenjilo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:03:21