Skip to content

Instantly share code, notes, and snippets.

@headsrooms
Created November 29, 2017 09:20
Show Gist options
  • Save headsrooms/8f1f11ed36a87a05e6ea77c4e6e691c2 to your computer and use it in GitHub Desktop.
Save headsrooms/8f1f11ed36a87a05e6ea77c4e6e691c2 to your computer and use it in GitHub Desktop.
Django admin keyword search
def search_view(request):
if request.GET.get('q', None):
django_admin_keyword_search(User, request.GET['q'], ['search_field_1', 'search_field_2'])
def django_admin_keyword_search(model, keywords, search_fields):
all_queries = None
for keyword in keywords.split(' '): # breaks query_string into 'Foo' and 'Bar'
keyword_query = None
for field in search_fields:
each_query = Q(**{field + '__icontains': keyword})
if not keyword_query:
keyword_query = each_query
else:
keyword_query = keyword_query | each_query
if not all_queries:
all_queries = keyword_query
else:
all_queries = all_queries & keyword_query
result_set = model.objects.filter(all_queries).distinct()
return result_set
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment