将带有Retrofit的datetime字段发送到Django REST Framework端点的问题

时间:2015-08-07 04:09:26

标签: datetime django-rest-framework retrofit

使用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要么在将它们作为多部分消息的一部分发送之前从字符串中删除引号,要么从不首先添加它们,似乎应该将相同的策略用于日期。

1 个答案:

答案 0 :(得分:0)

从k4yaman评论中提取答案。

  

在我的js文件中遇到同样的问题,stil我构建了我的Json数据   我自己让Django处理这个。因为Formating是唯一的原因   在我的情况下,我发布格式。

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