2017-07-29 1 views
0

Étant donné ci-dessous est ma classe sérialiseur. J'ai tous les champs dans un modèle. Je voudrais changer la représentation des données de sérialiseur dans le format fait sur commande. Essayé to_representation méthode de sérialiseur, mais n'a pas réussi. Donc, à mon avis, la classe définie et la sortie correspondant à eux sont également mentionnées ici.Personnaliser la réponse JSON dans le cadre de repos django

class MyListAPIView(ListAPIView): 
     def list(self,request): 
      queryset=MyModel.objects.all() 
      serializer=MyListSerilizer(queryset,many=True) 
      return Response({'Records':serializer.data}) 

sortie: ----------> Correspondant à voir est

"Records": [ 
    { 
     "Name": "abc", 
     "Address_ID": "6819319", 
     "Portal": "amksl", 
     "Address": "", 
     "City": "absjsls", 
     "DisplayOrderDateTime": null, 
     "Email": "[email protected]", 
     "Order_ID": "", 
     "Order_Code": "", 
     "Item_Code": "", 
     "DispatchedOn": "", 
     "Payment_Mode": "" 
    }, 
     { 
     "Name": "abc", 
     "Address_ID": "6819319", 
     "Portal": "amksl", 
     "Address": "", 
     "City": "absjsls", 
     "DisplayOrderDateTime": null, 
     "Email": "[email protected]", 
     "Order_ID": "", 
     "Order_Code": "", 
     "Item_Code": "", 
     "DispatchedOn": "", 
     "Payment_Mode": "" 
    }, 
     so on.... 

donc ma question est de savoir comment pourrais-je obtenir ce format JSON. Bref, comment puis-je personnaliser mon avis classe

 { 
     "identifiers":{ 
       "email":"[email protected]", 
       "phone":"123664" 
       }, 
"activity_type": "purchase", 
"timestamp": "UNIX TIMESTAMP",     
"products": [{ 
       "brandName": "abc", 
       "id": "1",         
       "sku": "abcd",         
       "name": "mnis",       
       "price": 12.9, 
       "discount": "", 
       "quantity": "", 
       "currency": "" 
       }] 
"cart_info":{ 
       "total":"", 
       "revenue":"", 
       "currency":"" 
      }, 
"Order_info":{ 
       "total":"2121", 
       . 
       . 
       . 
      } 
    }, 
    { 
     "identifiers":{ 
       "email":"[email protected]", 
       "phone":"123664" 
       }, 
"activity_type": "purchase", 
"timestamp": "UNIX TIMESTAMP",     
"products": [{ 
       "brandName": "abc", 
       "id": "1",         
       "sku": "abcd",         
       "name": "mnis",       
       "price": 12.9, 
       "discount": "", 
       "quantity": "", 
       "currency": "" 
       }] 
"cart_info":{ 
       "total":"", 
       "revenue":"",...so on 
+1

vous plutôt de personnaliser votre classe 'MyListSerilizer' . lire docs sur sérialiseurs -> http://www.django-rest-framework.org/api-guide/serializers/, devrait aider – pkisztelinski

+0

comment pourrais-je personnaliser MyListSerializer pour un seul modèle, j'ai essayé de diviser les champs en différentes classes de sérialiseurs, mais pas réalisable, si vous me fournissez un petit exemple, il serait préférable pour moi – user6847618

+0

vous pouvez ajouter des champs personnalisés en utilisant 'SerializerMethodField' -> http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield – pkisztelinski

Répondre

0

override to_representation méthode dans la chaque fois que vous appelez serializer.data, ce dictionnaire de représentation classe sérialiseur

class MyListSerilizer(ModelSerializer): 

    class Meta: 
     model=MyModel 
     fields=['Name','Address_ID','Portal','Address','City','DisplayOrderDateTime','Email','Order_ID','Order_Code','Item_Code','DispatchedOn','Payment_Mode','Shipping_Charge','ShippingMethodCode','ShippingMethodCharges','CashOnDeliveryCharges','CurrencyCode','BillingAddress','GiftWrapCharges','SaleOrderItemCode','Shipping_ref','Cancellable','OnHold','Quantity','Invoice_No''Portal',........] 


    def to_representation(self, instance): 
     # instance is the model object. create the custom json format by accessing instance attributes normaly and return it 


     identifiers = dict() 
     identifiers['email'] = instance.Email 
     identifiers['phone'] = instance.phone 

     representation = { 
      'identifiers': identifiers, 
      'activity_type': instance.xxxx, 
      'timestamp': instance.xxxxx, 
      . 
      . 
      . -> your custom data 
     } 

    return representation 

sera retourné