如何根据网址过滤对象? 我跟着这个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)
视图的逻辑取自正常工作的基本模型视图。所以,我认为这不是查询问题,更可能是导致问题的其他因素。
答案 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 的部分。