Django Rest Framework针对Multipe值过滤ModelViewSet字段 [英] Django Rest Framework Filter ModelViewSet Field Against Multipe Values
本文介绍了Django Rest Framework针对Multipe值过滤ModelViewSet字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的DRF API有问题。
I have an issue with my DRF API.
我想根据ID列表过滤问题列表。像这样:
I would like to filter a list of issues against a list of ids. Like so:
127.0.0.1:8000/api/issues/?id=2,12
这将返回整个问题列表
我也尝试过
http://127.0.0.1:8000/api/issues/?id=2&id=12
这将返回一个列表,该列表仅包含具有最后提供的ID的对象(ID为12的对象
This returns a list containing only the object with the last supplied id (the object with id 12
我还尝试了以下方法,它们全部返回了整个集合
I've also tried the following which all return the entire set
http://127.0.0.1:8000/api/issues/?id__in=2&id__in=12
http://127.0.0.1:8000/api/issues/?id__in=2,12
这是我的序列化器
from rest_framework import serializers
...
class IssueSerializer(serializers.HyperlinkedModelSerializer):
'''Serializer for issues'''
class Meta:
'''Model filed definitions'''
model = Issue
fields = ('id', 'inspection_sheet', 'picture', 'description', 'resolution')
和视图
from rest_framework import filters
from rest_framework import viewset
...
class IssueSet(viewsets.ModelViewSet):
'''Views for issues'''
queryset = Issue.objects.all()
serializer_class = IssueSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('id',)
推荐答案
要实现此目的,您必须创建过滤器集,使用 BaseInFilter :
To achieve this you will have to create a Filterset using a BaseInFilter:
class NumberInFilter(BaseInFilter, NumberFilter):
pass
class IssueFilter(FilterSet):
id = NumberInFilter(name='id', lookup_expr='in')
class Meta:
fields = ['id']
model = Issue
class IssueSet(viewsets.ModelViewSet):
'''Views for issues'''
queryset = Issue.objects.all()
serializer_class = IssueSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = IssueFilter
然后您应该可以使用:
http://127.0.0.1:8000/api/issues/?id=2&id=12
这篇关于Django Rest Framework针对Multipe值过滤ModelViewSet字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文