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 
    }) 
}