2016-05-03 7 views
1

Je ces serializers:Comment remplacer un objet par son identifiant dans Django Rest Framework?

class ASerializer(serializers.ModelSerializer): 
    name = serializers.CharField() 

    class Meta: 
     model = AModel 
     fields = ('id','name') 


class BSerializer(serializers.HyperlinkedModelSerializer): 
    a = ASerializer(partial=True) 
    name = serializers.CharField() 

    class Meta: 
     model = ‌‌BModel 
     fields = ('id','name', 'a') 


class CSerializer(serializers.HyperlinkedModelSerializer): 
    b = BSerializer(partial=True) 
    created_by = UserSerializer(required=False) 
    message = serializers.CharField() 

    class Meta: 
     model = CModel 
     fields = ('id','b', 'created_by', 'message') 

est au-dessous les données, je vous envoie au service:

data_json = { 
    "id": '1', 
    "b": '2', 
    "created_by":'3', 
    "message": 'Hello world' 
} 

Je veux que les données de réponse à inclure de tous les objets parfaits imbriqués, non seulement id objets imbriqués .

Comment puis-je remplacer un objet B ou created_by par leur identifiant afin de créer un objet C?

+0

essayer changer les champs à '(" id "," b__id "," created_by__id "," message ")' –

+0

et aussi vous obtenez l'identifiant en utilisant l'objet complet ct json comme 'b ['id']', 'crearted_by ['id']' lors de la création de l'objet C –

+0

veuillez essayer de mieux expliquer ce que vous voulez faire. Comment devrait ressembler le data_json? – ozren1983

Répondre

0

Essayez cet exemple, avec serializers définis comme:

class ASerializer(serializers.ModelSerializer): 
    name = serializers.CharField() 

    class Meta: 
     model = A 
     fields = ('id', 'name') 


class BSerializer(serializers.HyperlinkedModelSerializer): 
    name = serializers.CharField() 
    a = ASerializer(partial=True, many=True) 

    class Meta: 
     model = B 
     fields = ('id', 'name', 'a') 


class CSerializer(serializers.HyperlinkedModelSerializer): 
    name = serializers.CharField() 
    b = BSerializer(partial=True, many=True) 

    class Meta: 
     model = C 
     fields = ('id', 'name', 'b') 

Et viewset défini comme:

class CViewSet(viewsets.ModelViewSet): 
    queryset = C.objects.all() 
    serializer_class = CSerializer 

C'est par exemple de JSON retourné par viewset ci-dessus:

{ 
    "id": 2, 
    "name": "c2", 
    "b": [ 
     { 
      "id": 2, 
      "name": "b2", 
      "a": [ 
       { 
        "id": 2, 
        "name": "a2" 
       }, 
       { 
        "id": 3, 
        "name": "a3" 
       } 
      ] 
     }, 
     { 
      "id": 3, 
      "name": "b3", 
      "a": [ 
       { 
        "id": 3, 
        "name": "a3" 
       } 
      ] 
     } 
    ] 
}, 
+0

aucun mec, ne fonctionne pas pour la demande POST avec l'ID de l'objet 'b' –

+0

par ailleurs,' b' n'est pas une liste d'objets. 'b' est un objet unique dont j'ai besoin de le remplacer par id :) –