Reputation: 12433
I want to filter the objects with id. like this below.
fetch more than 12 , between 6 and 12, something like this..
I set RangeFilter()
like this but it shows only equal.
not more than, less than
class MyTextFilter(filters.FilterSet):
my_text = filters.CharFilter(lookup_expr='contains')
id = filters.RangeFilter()
class Meta:
model = MyText
fields = ('id','myText')
Thanks to @Mohammad Ali answer
I alter the code like this ,but still
invalid literal for int() with base 10: 'id'
error.
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))
Finally I solve the problem with this.
return queryset.filter(id__gte=args[0])
Upvotes: 1
Views: 500
Reputation: 2591
You can use filter method for each fields in your filter class.
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
Upvotes: 1