2014-08-31 33 views
9

Chciałbym wiedzieć, w jaki sposób mogę użyć django-rest-framework, aby zapewnić paginowany wynik json z żądania get q=thisterm.Integracja django-haystack z django-rest-framework?

Rozumiem końcówkę stogu siana rzeczy przy użyciu SearchQuerySet.filter(content=q) jednak jak serializować i utworzyć widok API z tym zestawem zapytań. Nie jestem pewien, jakiego zestawu użyć, ani podstawowej logiki stojącej za tym, co powinienem zrobić na końcu reszty.

Każda pomoc zostanie doceniona.

Dzięki

Odpowiedz

10

Po wielu prób i błędów znalazłem właściwą kombinację! Oto początek.

Zdefiniuj serializatora: serializers.py

class DotaSearchSerializer(serializers.Serializer): 
    text = serializers.CharField() 
    name = serializers.CharField() 
    quality = serializers.CharField() 
    type = serializers.CharField() 
    rarity = serializers.CharField() 
    hero = serializers.CharField() 
    image = serializers.CharField() 
    desc = serializers.CharField() 

Utwórz widok: views.py

class DotaSearchViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): 

    serializer_class = DotaSearchSerializer 
    permission_classes = (IsAuthenticated,) 
    authentication_classes = (SessionAuthentication, BasicAuthentication) 

    def get_queryset(self, *args, **kwargs): 
     request = self.request 
     queryset = EmptySearchQuerySet() 

     if request.GET.get('q') is not None: 
      query = request.GET.get('q') 
      queryset = SearchQuerySet().filter(content=query) 

     return queryset 

Zwróć uwagę, może chcesz wyczyścić dane i wykonywać inne kontrole bezpieczeństwa .

Route go: urls.py

router.register(r'search', api_views.DotaSearchViewSet, base_name='search') 
+0

to było niezwykle pomocne. Dzięki. Czy możesz doradzić mi, jak dodać liczbę wyników do wyjściowego JSON? –

+0

Spójrz na Haystack dla Django REST Framework: https://github.com/inonit/drf-haystack – Daviddd

+0

Otrzymujesz wymagane wyniki od otrzymania SearchQuerySet HayStack? Czy jest to ten sam mechanizm stosowany podczas korzystania z widoku HayStack (w przypadku formularzy wyszukiwania) lub czy są jakieś różnice wydajności? –