2017-11-13 18 views
0

ContractsContractItemsというモデルを作成しました。 ContractItemsテーブルには、Contractsテーブルの外部キー属性が含まれています。私はContractsと関連するContractItemsを返す必要があります。Django Restシリアライザ:関連フィールドの戻り値

私はそれのようなシリアライザを実装しました。

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

ありがとう、Bro。この便利な場合は、 –

+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