Использовать фильтр диапазона для django остальной рамки - PullRequest
1 голос
/ 03 марта 2020

Я хочу отфильтровать объекты по 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

Я изменяю код следующим образом, но все равно ошибка 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 Ответ

2 голосов
/ 03 марта 2020

Вы можете использовать метод фильтра для каждого поля в вашем классе фильтра.

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
...