Simo Siren
Simo Siren

Reputation: 51

How to filter query result with some matching letters instead of complete match in python django?

This code works if I send search word exactly like in the database. But if I have a task "Learn django" I want it to be found with "lea" or "djan"search string for example.

At Views.py:

def filter_tasks(request:HttpRequest):
context = {'task_list' : Task.objects.all().filter(content=request.POST['content'])
}
    return render(request,'tasks/task_list.html', context)

At HTML form

<form action="{% url 'filter_tasks' %}" method="POST" autocomplete="off">
{% csrf_token %}
<div class="input-group">
<input type="text" class="form-control" name="content"
placeholder="search for tasks">
<div class="input-group-append text-info">
<span class="input-group-text bg-white py-0">
<button type="submit" class="btn btn-sm text-info">
<i class="fa fa-search fa-lg"></i>
</button>

At model:

class Task(models.Model):
    content = models.TextField()

Upvotes: 3

Views: 371

Answers (1)

JPG
JPG

Reputation: 88509

Use icontains--(Django doc) lookup

def filter_tasks(request: HttpRequest):
    context = {
        'task_list': Task.objects.filter(
            content__icontains=request.POST['content']
        )
    }
    return render(request, 'tasks/task_list.html', context)

Upvotes: 4

Related Questions