2017-06-23 10 views
0

私のDRF APIに問題があります。Django Rest Frameworkフィルタモデルビューのマルチフィールド値フィールド

idsのリストに対して問題のリストをフィルタリングしたいと思います。これと同じように:

127.0.0.1:8000/api/issues/?id=2,12 

これは問題

の全リストを返す私はまた、これが最後の付属のID(オブジェクトでのみ、オブジェクトを含むリストを返します

http://127.0.0.1:8000/api/issues/?id=2&id=12 

試してみました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') 

そして、あなたはBaseInFilterを使用してFiltersetを作成する必要がありますこれを達成するためのビュー

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

あなたの質問は不明です。 'http://127.0.0.1:8000/api/issues/?id [] = 2&id [] = 12'のようなURLにリストを渡したいですか? – user3764893

+0

私はリスト内のIDを持つすべての問題を返すようにAPIをフィルタリングしようとしています。この例では、問題2と12があります。 – Derick

+0

それから、私は上記のコメントでそれを言及したように使用することができます – user3764893

答えて

0

です:

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 
+0

NumericFilterをNumberFilterに変更して動作させる必要がありました。 – Derick

+0

確かに!私は答えを更新した –

関連する問題