2011-12-24 46 views
4

我玩一點點沉重的客戶端應用程序。Django,Tastypie和檢索新的對象數據

想象我有這樣的模式:

class Category(models.Model): 
    name = models.CharField(max_length=30) 
    color = models.CharField(max_length=9) 

進出口使用knockoutjs(但我想這並不重要)。我有一個列表(observableArray)與類別,我想創建一個新的類別。

我創建了一個新對象,並將其推送到列表中。到現在爲止還挺好。

把它保存在我的數據庫上怎麼樣?因爲我正在使用tastypie,所以我可以創建一個POST到'/ api/v1/category /',並且voilà,新的類別位於數據庫中。

好的,但...我沒有刷新頁面,所以...如果我想更新新類別,我該怎麼做?

我的意思是,當我檢索類別時,我可以保存ID,這樣我就可以放入'/ api/v1/category/id'並保存更改,但是...當我創建一個新類別,DB給它分配一個id,但是我的javascript還不知道那個id。

換句話說

,工作流程是這樣的:

使得到>名單上推動現有的對象(與他們的IDS)>創建一個新的類別>推就行了>保存現有的類別(該類別沒有在javacript上的id)>編輯類別>我如何保存更改?

所以,我的問題是,共同的道路是什麼?我考慮過發送類別並以某種方式檢索id,並將其分配給js上的對象,以便稍後對其進行修改。問題是,對服務器進行POST不會返回任何內容。

在過去,我做了類似的事情,通過發佈發送對象,保存它,檢索它並將其發回,在成功方法中檢索id並將其分配給js對象。

謝謝!

回答

8

Tastypie爲資源提供了always_return_data選項。

當您的資源爲always_return_data=True時,API始終會在POST/PUT上返回完整的對象事件,以便在創建新對象時可以在同一請求上獲取創建的ID。

然後你可以從你的AJAX中讀取響應並解碼JSON(我還不知道淘汰賽)。

看到該文檔:http://readthedocs.org/docs/django-tastypie/en/latest/resources.html?highlight=always_return_data#always-return-data

希望這有助於