用Retrofit发送datetime字段到Django REST框架端点的问题



使用Retrofit我可以发送和接收数据,包括日期,但当我使用@Multipart它停止工作。

这是我发送数据的日志:

Content-Disposition: form-data; name="post_date"
Content-Type: application/json; charset=UTF-8
Content-Length: 26
Content-Transfer-Encoding: binary
"2015-08-06T19:37:14.000Z"

下面是我得到的错误:

{"post_date": ["Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]"]}

如果省略date_time字段,则所有其他字段都可以正常传输。我不确定我在这里做错了什么,我发送的数据与DRF期望的日期格式匹配,但它似乎不这样认为。

编辑:如果我使用Postman并发送Retrofit声称要发送的值,它就会工作。我可以复制并粘贴上面的日期(不带引号),它提交得很好。

编辑2:我弄清楚了问题,我的日志中日期值周围的引号不仅仅在我的日志中,它们在发送值到服务器时被添加到日期。所以…我如何说服Retrofit日期值不需要额外的引号?

编辑3:看起来问题是Gson将引号添加到日期时,它被格式化为JSON,然后Retrofit只是发送Gson提供的值。如果你要发送一个多部分的信息,你不需要这些引号。不知道如何继续,在Retrofit github页面上创建了一个问题。我知道Retrofit要么在将字符串作为多部分消息的一部分发送之前从字符串中删除引号,要么从一开始就不添加引号,似乎同样的策略应该用于日期。

从k4yaman评论中提取答案

在我的js文件中得到同样的问题,我仍然建立了我的Json数据让Django来处理。因为形成是唯一的原因在我的情况下,我张贴格式。

var today = new Date(); 
var dd = today.getDate(); 
var mm = today.getMonth()+1; //January is 0! 
var yyyy = today.getFullYear(); 
var hh = today.getHours(); 
var m = today.getMinutes(); 
var secs = today.getSeconds(); 
var now = yyyy+"-"+mm+"-"+dd+"T"+hh+":"+m+":"+secs