Django-REST-Framework で get_queryset を使用して、アプリの API を構築しています。
このフィルターを機能させる方法があるかどうか知りたい
http://api/data?district=ナシク、プネー
地区「Pune」または地区「Nasik」のすべてのデータを取得します。私は試してみました
http://api/data?district=Nasik&district=Pune ですが、予想どおり、フィルター間で AND を実行し、Pune 地区のみを取得します (これが最後のフィルターであるためだと思います)。
これが私のコードです:
from rest_framework_mongoengine.viewsets import ModelViewSet as MongoModelViewSet
from app.serializers import *
from mongoengine.queryset.visitor import Q
class ToolViewSet(MongoModelViewSet):
serializer_class = ToolSerializer
def get_queryset(self, *args, **kwargs):
queryset_list =Tool.objects.all()
fruit=self.request.query_params.get("fruit")
district=self.request.query_params.get("district")
taluka=self.request.query_params.get("taluka")
if fruit and district:
queryset_list = queryset_list.filter(
Q(fruit__icontains=fruit)
&Q(district__icontains=district)
)
return queryset_list
if fruit and taluka:
queryset_list = queryset_list.filter(
Q(fruit__icontains=fruit)
&Q(taluka__icontains=taluka)
)
return queryset_list
if district and taluka:
queryset_list = queryset_list.filter(
Q(district__icontains=district)
&Q(taluka__icontains=taluka)
)
return queryset_list
elif fruit:
queryset_list = queryset_list.filter(
Q(fruit__icontains=fruit)
)
return queryset_list
elif district:
queryset_list = queryset_list.filter(
Q(district__icontains=district)
)
return queryset_list
elif taluka:
queryset_list = queryset_list.filter(
Q(taluka__icontains=taluka)
)
return queryset_list
したがって、このコードは2つの異なるフィールドで機能し、
例えば:
http://api/?data?fruit=Banana&district=プネー
http://api/?data?fruit=Banana&taluka=Haveli
http://api/?data?taluka=Haveli&district=プネ
すべて動作していますが、
http://api/data?district=ナシク、プネー
これは機能しません。ここでは、このコードを「OR」に使用します
if district or district:
queryset_list = queryset_list.filter(
Q(district__icontains=fruit)
|Q(district__icontains=district)
)
return queryset_list
しかし、それは機能していません。これを解決する方法はありますか?