How to add filters to a query dynamically in Django?

后端 未结 6 483
半阙折子戏
半阙折子戏 2021-02-06 09:56

In my viewSet I am doing a query,

queryset= Books.objects.all();

Now from an ajax call I get my filter values from UI i.e. age,gender, etc. of

6条回答
  •  情书的邮戳
    2021-02-06 10:45

    this worked for me, I've merged Alex Morozov answer with Dima answer

    import operator
    
    def your_view(self, request, *args, **kwargs):
        # Here you list all your filter names
        filter_names = ('filter_one', 'filter_two', 'another_one', )
    
    queryset = Books.objects.all(); 
    filter_clauses = [Q(**{filter: request.GET[filter]})
                      for filter in filter_names
                      if request.GET.get(filter)]
    if filter_clauses:
        queryset = queryset.filter(reduce(operator.and_, filter_clauses))
    
    # rest of your view
    

提交回复
热议问题