2014-01-12 102 views
6

我有一個角度應用程序,它提供了一個帶有聯繫人數據和聯繫人列表的表單。每個聯繫人可以有N個號碼,每個號碼都有一個類型(單元格,家庭,工作...)下面的代碼將JSON發送到角度應用程序就好了,我可以在那裏處理它,包括添加新的數字,刪除數字.....但是,當DRF獲得完全相同的格式JSON回來,它不能反序列化它。它拋出了這個錯誤:如何製作Django Rest Framework序列化程序雙向

AttributeError: 'Contact' object has no attribute 'numbers' 

這是完全有效的,但串行是否有該領域,應該能夠掛到這些值,所以我可以將它們保存在我保存聯繫人。

如果我做了什麼完全做作這樣的更新方法:

self.object = self.get_object_or_none() 
self.object.numbers = [] 

我可以消除這個錯誤,但隨後拋出了這些類型的錯誤:

{'numbers': [ 
    {u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']}, 
    {u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']}, 
    {u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']} 
]} 

前兩個電話號碼不是新的,他們有ID字段,來自數據庫,第三個是新的,我試圖添加它。

這是代碼。當然,這並不是奇怪的做事的方式。 Django Rest框架我應該用什麼?我不斷遇到像這樣的表演停止者,這似乎是記錄的做事方式,但隨後他們驚人地爆炸。

class PhoneTypeSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = PhoneType 

class ContactPhoneSerializer(serializers.ModelSerializer): 
    number_type = PhoneTypeSerializer(source='number_type') 
    class Meta: 
     model = ContactPhone 
     depth = 1 
     exclude = ('owner',) 

class ContactSerializer(serializers.ModelSerializer): 
    numbers = ContactPhoneSerializer(source='number_set', many=True, required=False) 
class Meta: 
    model = Contact 

如何反序列化這些數據以便我可以保存它?

+0

你可以用發佈的數據顯示示例請求嗎? – mariodev

回答

6

我有相同的問題,並通過添加到序列化器一些標誌來解決它。在你的情況下,它應該是這樣的:

number_type = PhoneTypeSerializer(source='number_type', many=True, required=False, allow_add_remove=True, read_only=False) 

有點遲了,但也許它仍然有幫助。在這裏找到這個建議: Updating m2m not possible when using serializers as fields

相關問題