[Answer]-How to do complex query like this

1👍

✅

You can do this with keyword arguments and some filtering:

def get_queryset(self):
    # filters_map keys must match your queries
    filters_map = {
        'id': self.request.GET.get('id'),
        'first_name__icontains': self.request.GET.get('f_name'),
        'middle_name__icontains': self.request.GET.get('m_name'),
        'last_name__icontains': self.request.GET.get('l_name'),
        'relative_name__icontains': self.request.GET.get('r_name'),
        'phone_no_1__contains': self.request.GET.get('p_no'),
        'phone_no_2__contains': self.request.GET.get('p_no'),
        'gender': self.request.GET.get('gender')
    }
    # leave out empty strings
    query = dict((key, value) for key, value in filters_map.iteritems() if value)

    return Customer.objects.filter(**query)

A bit more about keyword arguments.

PS: I think it makes more sense to filter the queryset in the get_queryset method.

Leave a comment