2014-01-12 5 views
6

연락처 정보가있는 양식을 제공하는 각도 앱과 연락처 번호 목록이 있습니다. 각 연락처는 N 개의 숫자를 가질 수 있으며 그 숫자 각각에는 유형 (셀, 집, 직장 ...)이 있습니다. 아래의 코드는 json을 각도 애플리케이션으로 보내며 새로운 숫자를 추가하는 등의 방법으로 처리 할 수 ​​있습니다. numbers ..... 그러나 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 필드가 있고 db에서 왔고 세 번째 것은 새 것입니다. 추가하려고합니다.

다음은 코드입니다. 확실히 이것은 일을하는 기괴한 방법이 아닙니다. Django Rest Framework는 무엇을 사용해야합니까? 나는 이런 일을하는 문서화 된 방법 인 것 같은 쇼 스토퍼에 계속 뛰어 왔지만 그때 그들은 눈부시게 날려 버린다.

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

관련 문제