作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ListAPIView
,它使用 DjangoFilterBackend
根据 url 参数过滤房间。下面的代码可以很好地做到这一点。
现在,我想根据从 Room 对象的其他属性、另一个 url 参数以及我们可能对发出请求的用户的了解计算得出的分数对结果进行排序。函数本身无关紧要。
应用我已有的过滤器后如何对结果进行排序?
如果我自己进行过滤,我想我可以进行过滤,计算分数并在 get_queryset
中对结果进行排序,但我不知道在使用 django-filter
进行过滤后如何执行此操作。
示例查询
例如,我将执行此查询以按低于 100 的价格进行过滤。 other_field
值将用于计算排序分数:http://localhost:8000/api/search/rooms?price=100&other_field=200
代码
class RoomFilter(filters.FilterSet):
price = filters.NumberFilter(name="price", lookup_expr='lte')
features = filters.ModelMultipleChoiceFilter(
name="features",
conjoined=True,
queryset=Features.objects.all()
)
class Meta:
model = Room
fields = ['price', 'features']
class RoomSearchView(generics.ListAPIView):
queryset = Room.objects.all()
serializer_class = RoomSearchSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = RoomFilter
最佳答案
尝试在您的 API 中覆盖 list()
,如下所示,
class RoomSearchView(generics.ListAPIView):
queryset = Room.objects.all()
serializer_class = RoomSearchSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = RoomFilter
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
queryset = queryset.order_by('-id') # change is here >> sorted with reverse order of 'id'
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
关于django - 如何在 ListAPIView 中使用 django-filter 对过滤结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49060424/
我是一名优秀的程序员,十分优秀!