2017-08-22 43 views
0

我正在用Vue.js 2 SPA構建一個Django應用程序。這意味着一切都必須使用AJAX調用來完成。在我的情況下,這些都是用axios處理的。獲取Django Rest Framework從特定帖子變量獲取postdata

爲了方便起見,我在網上找到了ES6的Form類。這允許我有一個可重用的表單對象,我可以輕鬆地提交併仍然處理Promise,就像直接使用axios執行操作一樣。 窗體類看起來是這樣的:

import Errors from './Errors'; 
export default class Form { 
    /** 
    * Create a new Form instance. 
    * 
    * @param {object} data 
    */ 
    constructor(data) { 
     this.originalData = data; 

     for (let field in data) { 
      this[field] = data[field]; 
     } 

     this.errors = new Errors(); 
    } 


    /** 
    * Fetch all relevant data for the form. 
    */ 
    data() { 
     let data = {}; 

     for (let property in this.originalData) { 
      data[property] = this[property]; 
     } 

     return {data}; 
    } 


    /** 
    * Reset the form fields. 
    */ 
    reset() { 
     for (let field in this.originalData) { 
      this[field] = ''; 
     } 

     this.errors.clear(); 
    } 


    /** 
    * Send a POST request to the given URL. 
    * . 
    * @param {string} url 
    */ 
    post(url) { 
     return this.submit('post', url); 
    } 


    /** 
    * Send a PUT request to the given URL. 
    * . 
    * @param {string} url 
    */ 
    put(url) { 
     return this.submit('put', url); 
    } 


    /** 
    * Send a PATCH request to the given URL. 
    * . 
    * @param {string} url 
    */ 
    patch(url) { 
     return this.submit('patch', url); 
    } 


    /** 
    * Send a DELETE request to the given URL. 
    * . 
    * @param {string} url 
    */ 
    delete(url) { 
     return this.submit('delete', url); 
    } 


    /** 
    * Submit the form. 
    * 
    * @param {string} requestType 
    * @param {string} url 
    */ 
    submit(requestType, url) { 
     return new Promise((resolve, reject) => { 
      axios[requestType](url, this.data()) 
       .then(response => { 
        this.onSuccess(response.data); 

        resolve(response.data); 
       }) 
       .catch(error => { 
        this.onFail(error.response.data); 

        reject(error.response.data); 
       }); 
     }); 
    } 


    /** 
    * Handle a successful form submission. 
    * 
    * @param {object} data 
    */ 
    onSuccess(data) { 
     console.log(data); 
     this.reset(); 
    } 


    /** 
    * Handle a failed form submission. 
    * 
    * @param {object} errors 
    */ 
    onFail(errors) { 
     this.errors.record(errors); 
    } 
} 

當前給我一些問題的部分是,當我將數據提交給Django的REST框架,我得到的代碼的所有操作通過使用ModelSerializer,但我似乎無法找到一個簡單的方法告訴它,POST數據的結構與預期有些不同。 這是一個示例請求數據:

{"data":{"name":"b-0123","windfarm":2,"longtitude":"234","latitude":"345","ip_address":"10.0.0.123"}} 

我知道解決方法是,讓Django的知道,它應該得到POST數據模型,從request.POST['data']或獲得ES6 Form類通過原料而不是將所有內容作爲數據對象發送。 我不知道的部分是如何讓這些工作。

回答

0

原來這很簡單,得到這個工作。 我不得不改變這一點:這個

/** 
* Fetch all relevant data for the form. 
*/ 
data() { 
    let data = {}; 

    for (let property in this.originalData) { 
     data[property] = this[property]; 
    } 

    return {data}; 
} 

/** 
* Fetch all relevant data for the form. 
*/ 
data() { 
    let data = {}; 

    for (let property in this.originalData) { 
     data[property] = this[property]; 
    } 

    return data; 
} 

這回我的數據陣列,而不是一個對象與數據陣列