django rest框架过滤序列化程序字段
我有django api及其序列化程序和模型。。。 我使用如下过滤器: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',
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)
使用模型更新您的问题或指定您使用的在线数据类型字段?