2017-11-13 1 views
0

ContractsContractItems 인 모델을 만들었습니다. ContractItems 테이블에 Contracts 테이블의 외래 키 속성이 포함되어 있습니다. 해당 ContractItems과 함께 Contracts을 반환해야합니다.Django Rest Serializers : 관련 필드의 데이터 반환

나는 이와 같은 시리얼 라이저를 구현했다.

class ContractSerializer(ModelSerializer): 
    class Meta: 
     model = Contract 
     fields = ('id', 'name') 

나는 관련 ContractContractItems을 가져올 수 없습니다.

누구나 Contracts을 관련있는 ContractItems과 연결할 수있는 방법을 제안 할 수 있습니까? 또한 하나의 Contract에는 ContractItems이 많이있을 수 있습니다.

답변

3
class ContractItemSerializer(ModelSerializer): 
    class Meta: 
     model = ContractItems 
     fields = '__all__' 

class ContractSerializer(ModelSerializer): 

    contract_items = serializers.SerializerMethodField() 
    class Meta: 
     model = Contract 
     fields = ('id', 'name') 

    def get_contract_items(self, obj): 
     qs = obj.related_name.all() 
     return ContractItemSerializer(qs, many=True).data 
+1

"QS = obj.related_name.all()"이 모두를 얻을 것이다 당신이 외래 키 'Contract'에 대한 ContractItem 모델에 사용 된 관련 이름을 사용하십시오 계약 객체와 관련된 계약 항목 –

+0

감사합니다. 이게 유용하다고 생각되면 –

+0

이 작동합니다. 내 대답을 표시해주세요. –

0

혹시이 방법을 사용해보십시오. 관련된 객체를 직렬화 할 수 있습니다. 참조

class ContractItemSerializer(ModelSerializer): 
    class Meta: 
     model = ContractItems 
     exclude =() 
class ContractSerializer(ModelSerializer): 
    contract_items = ContractItemSerializer(many=True, read_only=True)  
    class Meta: 
     model = Contract 
     fields = ('id', 'name') 

확인이 : Example

관련 문제