[Django]-Dynamic filter on Django query

7👍

✅

Create a dict with a dynamic key generated from given_field and then unpack it using ** to generate keywords arguments.

def search_engine(model, given_field, text):
    # Stuff

    filters = {
        given_field+'__icontains': text
    }
    result = model.objects.filter(**filters)
    return result

0👍

This code solved my problem:

def students(request):
    if request.method == 'GET':
        if request.GET.items(): 
        # this condition will check wether we are passing any filters
            filters = {}
            for key, value in request.GET.items():
                if value != '':
                    filters[key] = value
            students = Students.objects.filter(**filters)
            # we can see only filtred students
        else:
            students = Students.objects.all()
            # we can see all students without any filters when we enter in to page 
    return render(request, 'students.html', {'students': students})

Leave a comment