2015-12-10 69 views
0

我想創建以下模型簡單的REST API:Django的REST框架,並與一個字段相關車型

我叫產品,其中一些字段主要實體:名稱,價格...... 我也有一個名爲Keyword的相關實體,其中包含一個字段:關鍵字。

每個產品都可以有一個或多個關鍵字。

我可以很容易地把這種分成兩個Django模型:

class Product(models.Model): 
    name = models.CharField("Name of the product", max_length=100) 
    description = models.TextField("Description of the product") 
    price = models.IntegerField("Price of the product") 
    received_at = models.DateField("Received at") 

class Keyword(models.Model): 
    keyword = models.CharField(max_length=50) 
    product = models.ForeignKey(Product, related_name="keywords") 

但我與串行丟失。

我想這樣一個簡單的動詞創建:

POST /products 
{ 
    "name": "My product name", 
    "description": "My product description", 
    "price": 40, 
    "received_at": "2015-12-1", 
    "keywords": ["keyword1", "keyword2"] 
} 

和公共列表中的所有,列表中的一個,更新和刪除:

GET /products 
[{"name": "Product 1"...}, {"name": "Product 2"...}] 

GET /products/1 
{"name": "Product 1", "description": ...} 

PUT /products/1 
{ 
    "name": "My product name", 
    "description": "My product description", 
    "price": 40, 
    "received_at": "2015-12-1", 
    "keywords": ["keyword2"] 
} 

DELETE /products/1 

的問題是管理的關鍵字。 創建新產品時創建所有關鍵字 產品更新時,我必須檢查哪些關鍵字是新聞以及哪些關鍵字已被刪除。

另外我希望我的API可以在不久的將來用更多的關係來擴展,比如帶有簡單字符串字段的「關鍵字關係」。

任何想法?

+0

既然你要發佈的產品一起關鍵字,你必須手動編寫的邏輯。 DRF現在不支持嵌套關係POST請求AFAIK。 –

回答

0

嘗試執行底層關鍵字作爲set的成員。然後,您可以簡單地使用每個新關鍵字調用add方法,並根據集合的工作性質,該集合將保持它獨特的分組。

a = set() 
a.add('keyword1') 
a.add('keyword2') 
a.add('keyword1') 
print(a) 

輸出:

set(['keyword1', 'keyword2']) 
+0

是的,一套是一個不錯的選擇。但是,更新請求可以包含比存儲的關鍵字更少的關鍵字。我可以做set(validated_data.get('keywords')) - set(instance.keywords)來獲取新的關鍵字和set(instance.keywords) - set(validated_data.get('keywords'))來獲取被刪除的關鍵字。有沒有更乾淨的解決方案來做到這一點? – Garet

相關問題