2016-07-19 6 views
-1

Wir möchten das Django-REST-Framework verwenden, um die Modelldaten (mit der über die Django-REST-Framework-API spezifizierten Filterung) als Diagramme darzustellen. Unsere Plot-Engine arbeitet direkt mit Django QuerySets.Django-REST-Framework: Stellen Sie dem Renderer QuerySet zur Verfügung

Die Frage ist: Wie ist es möglich, die Modelldaten als Django QuerySets zu serialisieren?

Wir haben versucht, einen Serializer zu schaffen, die einfach auf den Daten geht (ohne Erfolg):

class QuerySetSerializer(serializers.BaseSerializer): 
    many = True 
    def to_representation(self, obj): 
     return obj 

Es wäre toll, wenn es die gleiche QuerySet über die Django REST-Framework zugreifen möglich war (mit <my filter> Argumente über die Django REST-Framework URL-System geliefert), dass Sie intern mit

mymodel.objects.filter(<my filter>) 

diese Irgendwelche Ideen zugreifen würde, wie man erreichen?

+0

Ich verstehe nicht, wie Sie Daten übertragen möchten. Sie möchten es nicht als JSON serialisieren? –

+0

Genau. Ich möchte, dass der 'Renderer' Zugriff auf die 'QuerySet'-Instanz hat, die der API-Abfrage entspricht. (Der 'Renderer' kann dann mit dem 'QuerySet' machen, was er will - in diesem Fall rufen Sie eine Methode auf' QuerySet' auf, die ein Plot als .png erzeugt). (Siehe meinen Kommentar zu @jape auch - hoffe, es ist klarer?) – elke

Antwort

0

Meinst du, so etwas zu tun?

from rest_framework import generics, serializers 

from .models import Foo 


class QuerySetSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Foo 
     fields = ('id', 'field1', 'field2',) 


class QuerySetList(generics.ListAPIView): 
    serializer_class = QuerySetSerializer 

    def get_queryset(self): 
     return Foo.objects.filter(<my filter>) # You can filter whatever you want here 
+0

Ein Beispiel von dem, was ich möchte: Sagen wir, es gibt eine Django-Modellperson mit Attributename und E-Mail. Über die API konnte ich wie folgt auf alle Person-Instanzen mit einem bestimmten Namen zugreifen: '/ api /? Name = John'. Anstatt z.B. Json von diesen Instanzen möchte ich Zugriff auf das Person QuerySet (innerhalb des Renderers) haben. Dies sollte dem entsprechen, was Sie mit 'Person.objects.filter (name = John)' erhalten. Also mein Q ist: Wenn auf eine beliebige API-URL '/ api /? Name = John' zugegriffen wird, wie stelle ich dem Renderer das entsprechende QuerySet zur Verfügung. (Ist das jetzt klarer? Ich kann meine obigen Q update falls falls?) – elke

Verwandte Themen