2015-05-11 78 views
1

我正在使用Angularjs和Django進行一個小型項目。我有兩個不同的模型及其相應的終點。Django串行器多對多關係

class Skills(models.Model): 
    skills = models.CharField(max_length=100) 

    def __str__(self): 
     return self.skills 



    class Project(models.Model): 
... 
    required_skills = models.ManyToManyField(
      Skills, verbose_name="list of skills") 
.. 

這是我的技能副本終點

[ 
    { 
     "id": 1, 
     "skills": "Css" 
    }, 
    { 
     "id": 2, 
     "skills": "HTML5" 
    }, 
    { 
     "id": 3, 
     "skills": "Java" 
    } 
] 

在頭版我有一個使用$ http.post服務將數據發送到數據庫中的表。當我創建項目時,可能需要一項技能或多項技能。這裏是我的困惑來的地方,我可以通過發送pk來存儲我的外鍵,在這種情況下是id。但是,由於我處理的是多對多的關係,所以我無法弄清楚什麼是最好的處理方式。我已閱讀文檔和一些成功的在線資源。此外,表單有一個下拉菜單,其中包含技能列表。我使用$ http.get獲得了這個值。請任何人有任何想法如何解決這個問題?

http://www.django-rest-framework.org/api-guide/relations/ Serializing ManyToMany in Django Rest Framework (2.3.5) throws ValueError

回答

0

我不得不最近處理類似的情況。 我走近這一問題的方法是重寫創建方法串行的樣子:

def create(self, validated_data): 
    serviceOffers_data = validated_data.pop('serviceOffers') 

    def extract_id(s): 
     return s['id'] 

    clientfile = Clientfile.objects.create(**validated_data) 
    clientfile.serviceOffers.add(*ServiceOffer.objects.filter(id__in=map(extract_id, serviceOffers_data))) 

    return clientfile 

我的POST數據看起來像這樣:

{ 
    name: 'Hello', 
    serviceOffers: [ 
     { 
      id: 1, 
      name: 'service offer 1' 
     }, 
     { 
      id: 2, 
      name: 'service offer 2' 
     } 
    ] 
} 

的extract_id功能是不是強制性的。我使用它是因爲傳入的Json的結構。你也可以發送pk的列表並去掉extract_ids。