2016-02-18 12 views
8

Ich verwende Django Rest framework. Ich möchte mehrere Modelle serialisieren und als Antwort senden. Derzeit kann ich nur ein Modell pro Ansicht senden (wie CartView unten sendet nur Cart-Objekt). Folgende Modelle (nicht verwandt) können da sein.Mehrere Modelle in Django Rest Framework?

class Ship_address(models.Model): 
    ... 

class Bill_address(models.Model): 
    ... 

class Cart(models.Model): 
    ... 

class Giftwrap(models.Model): 
    ... 

Ich versuchte DjangoRestMultiplemodels verwenden, ist es ok funktioniert, aber einige Einschränkungen. Gibt es einen eingebauten Weg? Kann ich den Serializer, der in der folgenden Ansicht erstellt wird, nicht anhängen?

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) 

Ich mag DRF wirklich. Aber dieser Anwendungsfall (das Senden mehrerer Objekte) lässt mich darüber nachdenken, ob das Schreiben einer einfachen alten Django-Ansicht für eine solche Anforderung besser geeignet ist.

Antwort

11

Sie können es anpassen, und es wäre nicht zu seltsam, denn dies ist ein APIView (im Gegensatz zu einem ModelViewSet, von dem ein Mensch erwarten würde, dass das GET ein einzelnes Modell zurückgeben) z. Sie können mehrere Objekte aus verschiedenen Modellen in Ihrer GET-Antwort zurückgeben.

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

würde die Paginierung wie erwartet funktionieren? – latsha

+0

Ich wäre Ihnen sehr dankbar, wenn Sie Ihre Antwort so erweitern, wie Sie es mit Paginierung arbeiten lassen. – latsha

Verwandte Themen