Django Haystack Ergebnisse zu Django Rest Framework Serializer

8

Ich versuche, eine Suche mit Django Haystack zu machen, und dann muss ich die Ergebnisse an meinen Django Rest Framework-Serializer übergeben.

Das Django Rest Framework serializers.ModelSerializer erfordert, dass ein Abfragesatz von Objekten gesendet wird, damit der Serializer diese Objekte zusammen mit ihren Datenbankfeldern serialisieren kann.

Wenn ich meine API-Ansicht erstelle und die Suche verwende, um Ergebnisse zu erhalten, gibt haystack ein searchqueryset zurück.

Wie kann ich dieses searchqueryset in ein django-Abfrage-Set bringen, ohne etwas zu tun wie:

%Vor%

Wie Sie sich vorstellen können, kann die Suche manchmal mehr als 1000 Suchergebnisse liefern, was bedeutet, dass das obige sehr ineffizient ist.

Im Moment erlaubt mir das Django-Rest-Framework, meine zurückgegebenen Objekte zu paginieren. Ich paginiere auf jeder Seite 30 Objekte. Wie wäre es mir möglich, das gleiche mit meinem Haystack searchqueryset zu tun?

Jeder Ratschlag oder Ideen zur Verwendung von Haystack zusammen mit Django Rest Framework wäre großartig. Beispiele dafür, wie andere Ähnliches gemacht haben, wären auch cool:)

    
Zac 15.11.2013, 14:24
quelle

1 Antwort

8

Sie könnten die SearchView von Haystack verwenden (anstelle einer DRF-Ansicht), die das Seitenobjekt für die Paginierung freilegt. Dann können Sie das einfach an Ihren Serializer übergeben.

E.G. Vor einiger Zeit habe ich an etwas gearbeitet, das das json-Objekt der gerenderten Ergebnisse auf der aktuellen HTML-Seite benötigt. Daher habe ich ein Filter-Tag dafür geschrieben (wir verwendeten FacetedSearchView für die Benutzeroberfläche und DRF für eine allgemeinere RESTful-API). . Genannt wie in der Vorlage:

%Vor%

Tatsächliches Filter-Tag:

%Vor%

Sie können auch eine von generics.ListAPIView geerbte Ansicht schreiben und die Methode get_queryset überschreiben, bei der Sie den Abfrageparameter der Anfrage an SearchQuerySet , und geben Sie es dann mit dem Serializer aus. Mehr Infos hier:

Ссылка

Natürlich können Sie den ModelSerializer auf diese Weise nicht verwenden, es sei denn, Sie machen etwas wie von Ihnen erwähnt. DRF hat jedoch ein Beispiel für die Verwendung des Paginators in einem Abfrage-Set:

Ссылка

UPDATE Am Ende habe ich eine DRF-Ansicht verwendet, die einen Hashstack SearchQuerySet als Abfragegruppe verwendet und dann an einen Paginator übergeben hat. Hier ist ein vereinfachtes Beispiel (ich bin mir sicher, dass es einige rationalisiert werden kann), aber ich hoffe, es hilft jemandem, loszulegen.

%Vor%     
mynameistechno 12.01.2014 23:05
quelle