在viewset中基于url的Rest框架对象过滤器

时间:2014-08-30 05:22:32

标签: django django-views django-rest-framework

如何根据网址过滤对象? 我跟着这个documentation,它返回404.

网址

router.register(r'api/main/search/$', restviews.SearchResult)

序列化程序

class ListingSerializer(serializers.ModelSerializer):

    class Meta:
        model = Listing
        fields = ('name', 'categories', 'service', 'desc')

视图

class SearchResult(viewsets.ReadOnlyModelViewSet):
    model = Listing

    def list(self, request):
        if request.QUERY_PARAMS == 'GET' and request.QUERY_PARAMS.get('sec') == '1':
            key = request.GET.get('keyword')
            queryset = Listing.objects.filter(service__name__contains=key,).distinct()
            serializer = ListingSerializer(queryset, many=True)
            return Response(serializer.data)
        else:
            content = {'Error': 'nothing to see here'}
            return Response(content, status=status.HTTP_404_NOT_FOUND)

视图的逻辑取自正常工作的基本模型视图。所以,我认为这不是查询问题,更可能是导致问题的其他因素。

1 个答案:

答案 0 :(得分:0)

您似乎在这里进行了错误的比较: if request.QUERY_PARAMS == 'GET'

应该是 if request.method == 'GET'

从您发布的链接中: you'll normally need to provide at least the queryset and serializer_class attributes.

另外,如果您查看有关过滤的文档部分 - see here - 您会看到建议在 get_queryset 方法中进行过滤。更准确地说,您应该使用关于 Filtering against query parameters 的部分。