首页 文章

django rest frame work过滤器序列化器字段

提问于
浏览
0

我有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'],
    }

所有这些字段都是django模型字段,但在我的序列化程序中,我有一个像这样的SerializerMethodField:

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'],
    }

我该怎么办?谢谢

1 回答

  • 0

    您可以使用以下功能

    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)
    

相关问题