将范围过滤器用于Django Rest框架

时间:2020-03-03 10:02:04

标签: python django django-rest-framework

我想用id过滤对象。像下面这样。

获取6个到12个之间的12个以上的东西。

我将RangeFilter()设置为这样,但显示为相等。 不大于,小于

class MyTextFilter(filters.FilterSet):
    my_text = filters.CharFilter(lookup_expr='contains')
    id = filters.RangeFilter()

    class Meta:
        model = MyText
        fields = ('id','myText')

感谢@Mohammad Ali的答案

我这样修改代码,但仍然 invalid literal for int() with base 10: 'id'错误。

from django_filters import rest_framework as filters
class MyTextFilter(filters.FilterSet):
    my_text = filters.CharFilter(lookup_expr='contains')
    id = filters.CharFilter(method='id_filter')
    class Meta:
        model = MyText
        fields = ('id','myText')

def id_filter(self, queryset, value, *args, **kwargs):
    return queryset.filter(id>int(value))

最后我解决了这个问题。

    return queryset.filter(id__gte=args[0])

1 个答案:

答案 0 :(得分:1)

您可以对过滤器类中的每个字段使用过滤器方法。

from django_filters import rest_framework as df_rest_filter

class MyTextFilter(df_rest_filter.FilterSet):
    id = df_rest_filter.CharFilter(method='idFilter')

    class Meta:
        model = MyText
        fields = ('id')

    def idFilter(self, queryset, value, *args, **kwargs):
        if value > 12:
             return queryset.filter(id=value)
        else:
             return queryset