0

在进一步研究之后编辑原始问题。如何为Django REST框架设置Angular Material的md-datepicker?

使用Angular Material,我在$mdDialog内部有一个相对简单的形式,它向Django REST Framework端点发出POST请求。 除了md-datepicker元素外,所有的数据都提交得很好。

我可以选择一个日期,将它绑定到我的控制器中的一个变量,甚至实时显示数据(仅在md-datepicker之下)w/Angular模板。该输出表明,选定的日期仅仅是一个标准化的日期字符串:

"2015-11-27T06:00:00.000Z"

但在提交的,得到的表单数据发送的不同的长篇字符串:

parsed: Fri Nov 20 2015 00:00:00 GMT-0600 (Central Standard Time) 
raw: Fri+Nov+20+2015+00%3A00%3A00+GMT-0600+(Central+Standard+Time) 

这会导致Django的REST框架抛出一个错误的请求异常,因为该格式没有在我的settings.py中列出为可接受的。我需要它要么md-datepicker输出格式MM-DD-YYYYThh:mm:ss.uuuuuuZ,或在我的settings.py,目前有这些值指定其他格式:

REST_FRAMEWORK = { 
    'DATETIME_FORMAT': ('%m-%d-%YT%H:%M:%S.%fZ'), 
    'DATETIME_INPUT_FORMATS': ('%m-%d-%YT%H:%M:%S.%fZ', '$m-%d-$y') 
} 

怎样的md-datepicker POST值格式的输出Django的REST架构可以理解?我已经签出以下螺纹,呼吁在$mdDateLocaleProvider更新.parseDate.formatDate方法,但是这并没有改变,最终被注入到我的职务的请求的值:

Change format of md-datepicker in Angular Material

任何帮助表示赞赏 - Angular相对较新。谢谢,所有。

回答

0

经过更多的研究,我找到了答案。发布答案以防其他人遇到此问题。

基本上,md-datepicker默认存储JavaScript Date对象。尝试将Date对象作为参数发送,导致POST中的长整型字符串是Django REST Framework无法解释的。幸运的是,JS Date对象有一个用于生成符合ISO的字符串的内置方法,DRF没有问题。在我的控制器中,我更改了表单提交功能,使用.toISOString()方法转换JS对象,然后发出我的POST请求:

$scope.submitClient = function (data) { 
    data.md_date = data.md_date.toISOString(); 
    $.post({ 
      url: '/clients/', 
      data: data 
    }) 
}