2016-02-18 19 views
8

Sto usando Django Rest framework. Voglio serializzare più modelli e inviare come risposta. Attualmente posso inviare solo un modello per visualizzazione (come CartView qui sotto invia solo oggetto Cart). I seguenti modelli (non correlati) possono essere lì.Più modelli in Django Rest Framework?

class Ship_address(models.Model): 
    ... 

class Bill_address(models.Model): 
    ... 

class Cart(models.Model): 
    ... 

class Giftwrap(models.Model): 
    ... 

Ho provato ad utilizzare DjangoRestMultiplemodels, funziona bene, ma ha alcune limitazioni. Esiste un modo integrato? Non posso aggiungere al serializzatore creato nella seguente vista?

class CartView(APIView): 
    """ 
    Returns the Details of the cart 
    """ 

    def get(self, request, format=None, **kwargs): 
     cart = get_cart(request) 
     serializer = CartSerializer(cart) 
     # Can't I append anything to serializer class like below ?? 
     # serializer.append(anotherserialzed_object) ?? 
     return Response(serializer.data) 

Mi piace molto il DRF. Ma questo caso d'uso (dell'invio di più oggetti) mi fa pensare se scrivere una semplice vista Django tradizionale sia più adatto a tale esigenza.

risposta

11

È possibile personalizzarlo, e non sarebbe troppo strano, perché questo è uno APIView (al contrario di un ModelViewSet da cui un essere umano si aspetterebbe che GET restituisca un singolo modello) ad es. è possibile restituire diversi oggetti da diversi modelli nella risposta GET

def get(self, request, format=None, **kwargs): 
    cart = get_cart(request) 
    cart_serializer = CartSerializer(cart) 
    another_serializer = AnotherSerializer(another_object) 

    return Response({ 
     'cart': cart_serializer.data, 
     'another': another_serializer.data, 
     'yet_another_field': 'yet another value', 
    }) 
+0

l'impaginazione funzionerà come previsto? – latsha

+0

Sarei molto grato se estenderete la vostra risposta su come farlo funzionare con l'impaginazione. – latsha

Problemi correlati