首页 > 解决方案 > 当我更新一条记录时,django 的排序结果发生了变化

问题描述

我使用了 postgresql 和 rest_framework.filters.OrderingFilter 库

在我的观点中:

...

serializer_class = myModelSerializer

querset = myModel.objects.all().order_by('-id')

filter_backends = (DjangoFilterBackend, OrderingFilter)

ordering_fields = ('fields1', 'fields2')

例如:我有五条按fields2 desc排序的记录:

当我更新record2 fields3并仍然按字段desc排序时,排序结果发生了变化:

为什么会这样?

顺便说一句:这个问题在mysql上没有发生

标签: djangopostgresqldjango-rest-framework

解决方案


我已经解决了这个问题

filter_backends = (DjangoFilterBackend, MyOrderingFilter)

只需在 ordering_list 中附加默认排序字段(“id”或“create_time”)

from rest_framework.filters import OrderdingFilter
class MyOrderingFilter(OrderingFilter):
    def get_orderding(self, request, queryset, view):
        orderding = super().get_orderding(request, queryset, view)
        if ordering and orderding != self.get_default_orderding(view):
            orderding.append(self.get_default_orderding(view)[0])
        return orderding

推荐阅读