如何在 Django 中使用相同的键过滤多个查询参数?
How can I filter multiple query parameters with same key in Django?
我正在尝试使用相同的键过滤多个查询参数,例如:
api/?city=喀山&city=莫斯科
但是我得到了 city=Kazan 的所有对象
我试过这段代码,但没有任何改变:
class FinalListView(generics.ListAPIView):
serializer_class = FinalSerializer
filter_backends = [django_filters.rest_framework.DjangoFilterBackend]
def get_queryset(self):
condition = Q()
queryset = Final.objects.all()
city = self.request.query_params.getlist('city')
if city:
if city != 'all':
for a in city:
condition |= Q(city__startswith=a)
queryset = queryset.filter(condition)
return queryset
您应该只在 for 循环的 结尾 过滤:
def get_queryset(self):
condition = Q()
queryset = Final.objects.all()
city = self.request.query_params.getlist('city')
if city:
if city != 'all':
for a in city:
condition |= Q(city__startswith=a)
# ↓ end of the for loop
queryset = queryset.<b>filter(condition)</b>
return queryset
您必须修正缩进,
def get_queryset(self):
condition = Q()
queryset = Final.objects.all()
city = self.request.query_params.getlist('city')
if city:
if city != 'all':
for a in city:
condition |= Q(city__startswith=a)
queryset = queryset.filter(condition)
return queryset
我正在尝试使用相同的键过滤多个查询参数,例如:
api/?city=喀山&city=莫斯科
但是我得到了 city=Kazan 的所有对象
我试过这段代码,但没有任何改变:
class FinalListView(generics.ListAPIView):
serializer_class = FinalSerializer
filter_backends = [django_filters.rest_framework.DjangoFilterBackend]
def get_queryset(self):
condition = Q()
queryset = Final.objects.all()
city = self.request.query_params.getlist('city')
if city:
if city != 'all':
for a in city:
condition |= Q(city__startswith=a)
queryset = queryset.filter(condition)
return queryset
您应该只在 for 循环的 结尾 过滤:
def get_queryset(self):
condition = Q()
queryset = Final.objects.all()
city = self.request.query_params.getlist('city')
if city:
if city != 'all':
for a in city:
condition |= Q(city__startswith=a)
# ↓ end of the for loop
queryset = queryset.<b>filter(condition)</b>
return queryset
您必须修正缩进,
def get_queryset(self):
condition = Q()
queryset = Final.objects.all()
city = self.request.query_params.getlist('city')
if city:
if city != 'all':
for a in city:
condition |= Q(city__startswith=a)
queryset = queryset.filter(condition)
return queryset