我正在使用DRF并打包Django-Filter 1.1版。
在get调用中,我在下面的查询参数中传递了多个值,例如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
通过使用range look_up表达式,当前可以在两个数字之间获取值,但是当有两个以上的值时,不能在传递的数字之间获取小于值。
示例:如果我通过?age = 10,20,30 ,则结果可能是这样的10,12,13,17,19,10,23 ,22,25,29,30。
请指导我
谢谢
答案 0 :(得分:0)
Django过滤器使用Django字段查找执行过滤。
字段查询range
转换为SQL BETWEEN
子句,并且只能采用2个值来执行范围(上下限)。您不能将超过2个值传递给BETWEEN子句。
要能够对两个以上的值进行过滤,您需要使用相同的过滤器两次对不同的值进行过滤。像Filter(1,6)和Filter(9,12)
https://docs.djangoproject.com/en/2.2/ref/models/querysets/#range