我的DRF API存在问题。
我想根据ID列表过滤问题列表。像这样:
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的对象
)我还尝试了以下所有内容,它们都返回整个集合
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',)
答案 0 :(得分:0)
要实现此目的,您必须使用Filterset:
创建BaseInFilterclass 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