是否有一种方法可以将过滤器添加到查询集中,如OrderingFilter中的"created“之类的特定排序字段?我想要这个过滤器来订购:
F('created').desc(nulls_last=True)
这是我的代码:
class ProductFilter(filters.FilterSet):
ordering = filters.OrderingFilter(fields=['price', 'created'])
class Meta:
model = Product
发布于 2020-11-02 07:10:45
这对我起了作用:
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
https://stackoverflow.com/questions/64640595
复制相似问题