将django-haystack与django-rest-framework集成?

Dee*_*eep 10 django django-haystack django-rest-framework

我想知道,我如何使用django-rest-framework从get请求中提供分页的json结果q=thisterm.

我理解干草堆结束使用SearchQuerySet.filter(content=q)但是如何使用此查询集序列化和创建api视图.我不确定使用哪个视图集,也不确定我在其余部分需要做的基本逻辑.

任何帮助,将不胜感激.

谢谢

Dee*_*eep 11

经过大量的反复试验,我找到了正确的组合!这是一个开始.

定义序列化程序: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()
Run Code Online (Sandbox Code Playgroud)

创建视图: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
Run Code Online (Sandbox Code Playgroud)

请注意,您可能希望清理输入并执行其他安全检查.

路由它:urls.py

router.register(r'search', api_views.DotaSearchViewSet, base_name='search')
Run Code Online (Sandbox Code Playgroud)