Django OrderingFilter NullsLast 排序
重写 OrderingFilter 的 filter_queryset() 方法
class NullsLastOrderingFilter(OrderingFilter):
def filter_queryset(self, request, queryset, view):
ordering = self.get_ordering(request, queryset, view)
def filter_object(x):
return F(x[1:]).desc(nulls_last=True) if x[0] == '-' else F(x).asc(nulls_last=True)
if ordering:
ordering = map(filter_object, ordering)
queryset = queryset.order_by(*ordering)
return queryset