Django rest框架筛选器数小于lis

2024-04-24 15:52:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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。你知道吗

请引导我

谢谢大家


Tags: nameselfage参数valuedeffilterlist
1条回答
网友
1楼 · 发布于 2024-04-24 15:52:25

Django过滤器使用Django字段查找来执行过滤。你知道吗

字段查找range转换为SQL BETWEEN子句,只能取2个值来执行一个范围(下限和上限)。向BETWEEN子句传递的值不能超过2个。你知道吗

为了能够对2个以上的值进行筛选,您需要对不同的值应用相同的筛选两次。如过滤器(1,6)和过滤器(9,12)

https://docs.djangoproject.com/en/2.2/ref/models/querysets/#range

相关问题 更多 >