Я бы посмотрел на jsonresponse :
def search_titles(request):
if request.method == "POST":
search_text = request.POST['search_text']
else:
search_text = ''
products = Product.objects.filter(title__contains = search_text)
products = list(products) # important: convert the QuerySet to a list object
return JsonResponse({'products':products})
С HttpResponse:
def search_titles(request):
if request.method == "POST":
search_text = request.POST['search_text']
else:
search_text = ''
products = Product.objects.filter(title__contains = search_text)
products = serializers.serialize('json', products)
return HttpResponse(json.dumps(products), content_type = 'application/json')
Примечание: я использовал json.dumps (), а не json.dump (), которому нужен файловый объект и дамп в него JSON.