在 django OrderingFilter 中添加过滤器

Adding filter in django OrderingFilter

有没有办法为特定排序字段(如 OrderingFilter 中的“创建”)向查询集添加过滤器? 我想要这个过滤器来订购:

F('created').desc(nulls_last=True)

这是我的代码:

class ProductFilter(filters.FilterSet):
    ordering = filters.OrderingFilter(fields=['price', 'created'])

    class Meta:
        model = Product

这对我有用:

class NullsLastOrderingFilter(filters.OrderingFilter):
    def filter(self, qs, value):
        if value in ([], (), {}, '', None):
            return qs

        ordering = [self.get_ordering_value(param) for param in value]

        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 = qs.order_by(*ordering)

        return queryset


class ProductFilter(filters.FilterSet):
    ordering = NullsLastOrderingFilter(fields=['price', 'created'])

    class Meta:
        model = Product