Я использую get_queryset с Django-REST-Framework для создания API для моего приложения.с использованием django-rest-framework, как работает запрос для полей списка?
Я хотел бы знать, если есть способ, чтобы получить этот фильтр работает
http://api/data?district=Nasik,Pune
, чтобы получить все данные с районом «Пуной» или район «Назиком». Я попытался с
http://api/data?district=Nasik&district=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=Pune
http://api/?data?fruit=Banana&taluka=Haveli
http://api/?data?taluka=Haveli&district=Pune
все работают, но,
http://api/data?district=Nasik,Pune
это не работает, здесь я использую этот код для "ИЛИ"
if district or district:
queryset_list = queryset_list.filter(
Q(district__icontains=fruit)
|Q(district__icontains=district)
)
return queryset_list
, но это не работает, никакого понятия, как решить это?
Я ответил на другой вопрос о том, как решить список параметров в последнее время, вы могли бы найти его полезным при решении вашего списка фильтра слов: http://stackoverflow.com/a/41335388/7120972. Кроме того, вы можете разрешить список конструкторов запросов (объектов Q) в упрощенном режиме: http://stackoverflow.com/a/26613698/7120972. –
Я написал библиотеку поисковых систем django, чтобы решить случай, подобный вашему, может быть, вы можете взглянуть на него ... https: //github.com/enix223/djolar .. – Enix