我使用的是DRF和包Django过滤器版本1.1。你知道吗
在get call中,我在query参数中传递多个值,如10、20、30、40,如下所示
http://websiteapi.comp/searchFilter?persona=name&age=10,20,30
因此,根据age参数中发送的值,在本例中为10,20,30,我希望获得小于10,20,30值的所有记录。你知道吗
下面是我的代码片段
class ListFilter(Filter):
def filter(self, qs, value):
value_list = value.split(u',')
return super(ListFilter, self).filter(qs, Lookup(value_list, 'in'))
class SqureFeetFilter(Filter):
def filter(self, qs, value):
value_list = value.split(u',')
return super(SqureFeetFilter, self).filter(qs, Lookup(value_list, 'range'))
class ProfileFiltter(django_filters.FilterSet):
person = ListFilter(name='person')
sf = SqureFeetFilter(name='age',lookup_expr='range')
class Meta:
model = Profile
fields = [ 'person','age']
class ProfileSearchVieset(viewsets.ModelViewSet):
queryset = Profile.objects.all()
serializer_class = ProfileSerializer
permission_classes = [IsAuthenticated]
filter_backends = (DjangoFilterBackend,)
filter_class =ProfileFiltter
当前通过使用范围查找表达式,我可以得到两个数之间的值,但当有两个以上的值时,无法得到小于传递数之间的值。你知道吗
示例:如果我通过了?年龄=10,20,30,那么结果可以是10,12,13,17,19,10,23,22,25,29,30。你知道吗
请引导我
谢谢大家
Django过滤器使用Django字段查找来执行过滤。你知道吗
字段查找
range
转换为SQLBETWEEN
子句,只能取2个值来执行一个范围(下限和上限)。向BETWEEN子句传递的值不能超过2个。你知道吗为了能够对2个以上的值进行筛选,您需要对不同的值应用相同的筛选两次。如过滤器(1,6)和过滤器(9,12)
https://docs.djangoproject.com/en/2.2/ref/models/querysets/#range
相关问题 更多 >
编程相关推荐