How to Search Multiple Database Fields in Django

Let's say you are working on a search function for your Django project and would like to search for items based on their title and description. To do this you'll need to create Q objects and pass them into your fiilter function.


Let's try this out by filtering by keyword using two fields.


q = 'hello'
obj = MyModel.objects.filter(Q(name__icontains=q) | Q(description__contains=q))


Replace MyModel with the name of the model you wish to search through. The object returned will be a list of the matching items found in the table.


To add another pass it in using a | (pipe) then create a Q object containing myField__contains= and the value to search.


Full Search Function Example

Here is a complete example function that grabs the search keyword from the q get request parameter and searches multiple fields.


def search(request, *args, **kwargs):

q = request.GET['q']

obj = MyModel.objects.filter(Q(name__icontains=q) | Q(description__contains=q), status=True)

context = {
 'object': obj,
 'q': q

return render(request, 'search.html', context)