我正在使用 get_queryset 和 Django-REST-Framework 为我的应用程序构建 API。
我想知道是否有办法让这个过滤器工作
http://api/data?district=Nasik,浦那
获取“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
所以,这段代码适用于两个不同的领域,
例如:
http://api/?data?fruit=Banana&district=浦那
http://api/?data?fruit=Banana&taluka=Haveli
http://api/?data?taluka=Haveli&district=浦那
一切都在工作,但是,
http://api/data?district=Nasik,浦那
这不起作用,在这里我将此代码用于“或”
if district or district:
queryset_list = queryset_list.filter(
Q(district__icontains=fruit)
|Q(district__icontains=district)
)
return queryset_list
但它不起作用,知道如何解决这个问题吗?