python - Django rest框架过滤器数量少于列表
问题描述
我正在使用 DRF 并打包 Django-Filter 1.1 版。
在 get 调用中,我在查询参数中传递了多个值,例如 10、20、30、40,如下所示,
http://websiteapi.comp/searchFilter?persona=name&age=10,20,30
所以根据年龄参数中发送的值,在本例中为 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
当前通过使用范围查找表达式,我能够获得两个数字之间的值,但是当有超过 2 个值时,无法在传递的数字之间获得小于值。
例如:如果我通过?age=10,20,30,那么结果可能是这样的 10,12,13,17,19,10,23,22,25,29,30。
请指导我
谢谢大家
解决方案
Django Filter 使用 Django Field Lookups 来执行过滤。
字段查找range
转换为 SQLBETWEEN
子句,并且只能采用 2 个值来执行范围(下限和上限)。您不能将超过 2 个值传递给 BETWEEN 子句。
为了能够过滤超过 2 个值,您需要使用不同的值两次应用相同的过滤器。像过滤器(1,6)和过滤器(9,12)
https://docs.djangoproject.com/en/2.2/ref/models/querysets/#range
推荐阅读
- java - Java 接口扩展和 Spring 的 Autowired
- c# - 如何检查一个字符串的数字高于另一个字符串?
- apache-kafka - 在控制台模式下运行时,Kafka 的并行概念是否适用?
- python - 打字时如何检查字符串长度?
- hyperledger-fabric - Hyperledger Fabric 中的链码实例化失败
- delphi - Delphi 10.3 中的 FastReports
- node.js - React JS 的路径名字符串问题
- vert.x - Vert.x 事件总线的问题
- python - 为什么我收到 TypeError:“NoneType”类型的对象没有 len() 错误(实际上是从我的代码的工作部分复制代码)
- tensorflow - 如何训练不同维度的数据