Mit Django-Graphen und Filtern beschriften

9

Ich möchte ein Feld in meinem Resolver von Django-Graphen mit django-filter zusammenfassen. Normalerweise würden meine Resolver aussehen wie:

%Vor%

Was gut funktioniert.
Allerdings möchte ich dem Modellfilter ein benutzerdefiniertes Abfrage-Set zur Verfügung stellen, damit ich Aggregationen für Felder durchführen kann. Ich versuche so etwas zu tun:

%Vor%

Wenn Sie das rohe SQL in GraphiQL überprüfen, sieht es korrekt aus. Die Fehlermeldung, die ich von GraphQL erhalte, ist jedoch

%Vor%

Das ist das richtige Ergebnis, aber ich bin mir nicht sicher, warum GraphQL dieses Objekt von django-graphen bezieht. Wie kann ich ein benutzerdefiniertes Abfrage-Set bereitstellen und dies ausführen?

    
duffn 15.09.2017, 14:00
quelle

3 Antworten

2

Damit das Abfrage-Set funktioniert, müssen Sie die Instanz des Modells abrufen, die Sie mit

erhalten können %Vor%

und dann können Sie weitere Aktionen versuchen.

%Vor%
  

noch Fehler

Probieren Sie ASSET UNION aus und sehen Sie, ob das funktioniert. Sie können auch DjangoConnectionField von relay.connection ausprobieren.

    
Astik Anand 26.09.2017 12:20
quelle
1

Es sieht so aus, als ob django-graphene ein QuerySet von Model-Instanzen erwartet. Wenn Sie .values() in einem QuerySet aufrufen, erhalten Sie ein queryset von Dictionaries zurück, daher das Received incompatible instance .

Sie können möglicherweise Unterabfrageausdrücke verwenden oder einige davon ausführen rawsql-Abfragen , die beide Modellinstanzen zurückgeben hängt wirklich von der Art der Beziehungen ab, die Sie in Ihren Modellen eingerichtet haben.

Es sieht fast so aus, als könnte es einfacher sein, diese Anmerkung vom anderen Ende der Beziehung (Kundenseite) aus zu machen, da Sie .values() nicht benötigen würden, aber möglicherweise nicht für das, was Sie brauchen.

    
laidibug 19.09.2017 19:54
quelle
1

Ich nehme an, dass Ihr Problem auftritt, weil .values() gibt ein Wörterbuch und keine Modellinstanz zurück.

Sie können versuchen, die Verwendung von .values() zu vermeiden, wie Sie in den letzten beiden Beispielen von Sammel-Spickzettel und im Aggregate für jedes Element in einem QuerySet -Abschnitt generieren:

%Vor%

Denken Sie jedoch daran, dass Sie Ihren "Frontend" / Empfänger entsprechend anpassen müssen, da Ihr Resolver jetzt einen Queryset und kein Wörterbuch zurückgibt.

    
John Moutafis 26.09.2017 11:24
quelle

Tags und Links