django rest框架过滤序列化程序字段

django rest框架过滤序列化程序字段,django,django-rest-framework,Django,Django Rest Framework,我有django api及其序列化程序和模型。。。 我使用如下过滤器: class OrderFilter(django_filters.FilterSet): class Meta: model = Dealer fields = { 'first_name': ['icontains', 'exact'], 'last_name': ['icontains', 'exact'], 'mobile': ['icontains',

我有django api及其序列化程序和模型。。。 我使用如下过滤器:

class OrderFilter(django_filters.FilterSet):

class Meta:
    model = Dealer
    fields = {
        'first_name': ['icontains', 'exact'],
        'last_name': ['icontains', 'exact'],
        'mobile': ['icontains', 'exact'],
        'is_active': ['exact'],
        'agent': ['exact'],
    }
class DealerListSerializer(serializers.ModelSerializer):

online = serializers.SerializerMethodField()

def get_online(self, obj):
    r = Redis.get_instance().conn
    key = settings.ONLINE_PREFIX.format(obj.id)
    if r.get(key):
        return True
    return False
所有这些字段都是django模型字段,但在我的序列化程序中,我有一个SerializerMethodField,如下所示:

class OrderFilter(django_filters.FilterSet):

class Meta:
    model = Dealer
    fields = {
        'first_name': ['icontains', 'exact'],
        'last_name': ['icontains', 'exact'],
        'mobile': ['icontains', 'exact'],
        'is_active': ['exact'],
        'agent': ['exact'],
    }
class DealerListSerializer(serializers.ModelSerializer):

online = serializers.SerializerMethodField()

def get_online(self, obj):
    r = Redis.get_instance().conn
    key = settings.ONLINE_PREFIX.format(obj.id)
    if r.get(key):
        return True
    return False
我想应用在线领域的过滤器

class OrderFilter(django_filters.FilterSet):
online = django_filters.rest_framework.BooleanFilter(method='filter_online')

def filter_online(self, queryset, name, value):
    ?????

class Meta:
    model = Dealer
    fields = {
        'first_name': ['icontains', 'exact'],
        'last_name': ['icontains', 'exact'],
        'mobile': ['icontains', 'exact'],
        'is_active': ['exact'],
        'agent': ['exact'],
        'online': ['exact'],
    }
我该怎么办?
谢谢

您可以使用以下功能

def filter_online(self, queryset, name, value):
     list_of_id = queryset.values("id", flat=True)
     r = Redis.get_instance().conn
     true_list = []
     false_list = []
     for id in list_of_id:
       key = settings.ONLINE_PREFIX.format(id)
       if r.get(key):
         true_list.append(id)
       else:
         false_list.append(id)
     if value:
        return querset.filter(id__in=true_list)
     else:
        return queryset.filter(id__in=fasle_list)

使用模型更新您的问题或指定您使用的在线数据类型字段?