2017-11-13 2 views
0

Ich erstellte Modelle, die Contracts und ContractItems sind. ContractItems Tabelle enthält ein Fremdschlüsselattribut Contracts Tabelle. Ich muss Contracts mit ihren relevanten ContractItems zurückgeben.Django Rest Serializer: Rückgabedaten von verwandten Feld

Ich implementierte einen Serializer wie es.

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

Ich konnte nicht ContractItems auf relevante Contract bekommen.

Kann jemand vorschlagen, Contracts mit ihren relevanten ContractItems zu bekommen? Und auch One Contract kann viele ContractItems haben.

Antwort

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()“ bitte den zugehörigen Namen verwenden, die Sie für den Fremdschlüssel 'Contract' in ContractItem Modell verwendet wird dies erhalten alle Vertragsposition bezogen auf ein Vertragsobjekt –

+0

Danke, Bro. es funktioniert –

+0

Wenn Sie dieses nützlich finden, markieren Sie bitte meine Antwort –

0

Vielleicht versuchen Sie dies auch. Sie können die verwandten Objekte auch serialisieren.

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') 

prüfen diese Referenz: Example

Verwandte Themen