【问题标题】:Rest framework object filter based on url in viewset基于视图集中url的Rest框架对象过滤器
【发布时间】:2014-08-30 05:22:32
【问题描述】:

如何根据 url 过滤对象? 我关注了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)

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

【问题讨论】:

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


    【解决方案1】:

    您似乎在这里进行了错误的比较: 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的部分。

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      相关资源
      最近更新 更多