对Django rest框架使用范围过滤器

2024-09-27 20:18:10 发布

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

我想过滤id为的对象。如下所示

获取超过12个,介于6到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 answer

我这样修改代码,但仍然 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])

Tags: textidmyfilterlookupfiltersmetaclass
1条回答
网友
1楼 · 发布于 2024-09-27 20:18:10

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

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

相关问题 更多 >

    热门问题