在如下所示的 detail_route
方法中,我如何支持使用 ordering
查询参数对事件进行排序,如下所示:
http://localhost.com/items/123/events?ordering=EventDateTime
class ItemViewSet(viewsets.ModelViewSet):
queryset = Item.objects.all()
serializer_class = ItemSerializer
filter_backends = (
filters.OrderingFilter
)
ordering_fields = ('Label')
@detail_route()
def events(self, request, pk=None):
item = self.get_object()
events = item.events.all()
page = self.paginate_queryset(events)
if page is not None:
serializers = EventSerializer(page, many=True, context={'request': request})
return self.get_paginated_response(serializers.data)
serializers = EventSerializer(events, many=True, context={'request': request})
return Response(serializers.data)
我尝试了以下方法,但没有任何结果:
@detail_route()
def events(self, request, pk=None):
item = self.get_object()
events = filters.OrderingFilter().filter_queryset(request, item.events.all(), self)
page = self.paginate_queryset(events)
if page is not None:
serializers = EventSerializer(page, many=True, context={'request': request})
return self.get_paginated_response(serializers.data)
serializers = EventSerializer(events, many=True, context={'request': request})
return Response(serializers.data)
最佳答案
正如汤男孩建议的那样。您需要将 EventDateTime 添加到 ItemViewSet 中的 ordering_fields 中。
关于python - 使用 Django Rest Framework 订购带有排序查询参数的detail_route,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40507370/