2014-08-31 31 views
9

我想知道,我如何使用django-rest-framework從獲取請求q=thisterm提供分頁的json結果。將django-haystack與django-rest-framework結合起來?

我明白使用SearchQuerySet.filter(content=q)的事情的草垛結束,但是我該如何使用此查詢集序列化並創建api視圖。我不確定使用哪種視圖,也不知道我需要在剩下的事情上做些什麼。

任何幫助,將不勝感激。

感謝

回答

10

大量的試驗和錯誤之後,我已經找到了正確的組合!這是一個開始。

定義串行: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() 

創建視圖: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 

請注意,您可能需要清潔的輸入並執行其他安全檢查。

路線是:urls.py

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

,這是非常有用的。謝謝。你能告訴我如何將結果計數添加到輸出的JSON嗎? – 2015-07-27 23:07:03

+0

查看Haystack for Django REST Framework:https://github.com/inonit/drf-haystack – Daviddd 2016-07-05 06:11:22

+0

您從HayStack的SearchQuerySet獲得所需的結果嗎? 當使用HayStack視圖(在搜索表單的情況下)或者是否存在任何性能差異時,是否遵循同樣的機制? – 2017-01-30 10:08:15