我想用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])
答案 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