在 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
有没有办法为特定排序字段(如 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