如何在 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