2014-10-08 2 views
5

어떻게 가야합니까 다시 사용하여 DRF에서 중첩 된 직렬 변환기를 사용할 때 참조 된 개체를 :재사용 기존 개체 시리얼

class Address(models.Model): 
    address_line = models.CharField(max_length=45) 

class Person(models.Model): 
    name = models.CharField(max_length=45) 
    address = models.ForeignKey(Address) 
:

것은이 전 다음과 같은 두 가지 Model의 있다고 가정 해 봅시다 Serializer들과

:

class AddressSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Address 

class PersonSerializer(serializers.ModelSerializer): 
    address = AddressSerializer() 

    class Meta: 
     model = Person 

는 지금 직렬 변환기 만들고 모두 Address와핸들함께. 예컨대, 내가 게시 할 때 다음

{ 
    'name': 'Alex', 
    'address': { 
     'address_line': "1 Here" 
    } 
} 

Person가 생성하고 Address가 새로 Address 생성을 가리키는 Person 생성됩니다.

새로운 Address를 생성 할 수 있지만, 이미 주어진 address_lineAddress이있는 경우 기존 Address를 재사용하는 가장 좋은 방법은 무엇입니까? 예를 들어 address_line 필드를 unique으로 만들고 싶다면? (이 객체 재사용은 때때로 "인턴"라고합니다)

무엇에 대한 (이 두 개의 주소 필드 address_line1address_line2했고, 나는 이미 그 필드의 양쪽과 Address이 존재하는 경우 Address 객체를 다시 사용하기를 원한다면 즉 unique_together=(address_line1, address_line2)을)? 나는 데 :

+1

이 도움이

class PersonSerializer(serializers.ModelSerializer): address = AddressSerializer() class Meta: model = Person def create(self, validated_data): # pop the validated user data # assuming its a required field, # it will always be there in validated_data address = validated_data.pop('address') try: address = Address.objects.get(address_line=address.get('address_line')) except ObjectDoesNotExist: address_serializer = AddressSerializer(data=address) address_serializer.is_valid(raise_exception=True) address = address_serializer.save() else: # save the user and update the validated_data for setting up profile validated_data['address'] = address return super(PersonSerializer, self).create(validated_data) 

희망 : –

답변

0

는 최근에 나는 (그 단지 참조 용 코드가 테스트되지 않았습니다) 다음과 같은 방법을 사용하여 해결, 비슷한 문제에 직면 같은 문제. 해결책을 찾았습니까?