Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.db.models import Q, Case, When, Value, IntegerField
- class SearchResultsAdminMixin(object):
- def get_search_results(self, request, queryset, search_term):
- ''' Show exact match for title and slug at top of admin search results.
- '''
- qs, use_distinct = \
- super(SearchResultsAdminMixin, self).get_search_results(
- request, queryset, search_term)
- search_term = search_term.strip()
- if not search_term:
- return qs, use_distinct
- def cond_int(query):
- return Case(
- When(query, then=Value(1)),
- default=Value(0),
- output_field=IntegerField()
- )
- qs = qs.annotate(
- exact_title=cond_int(Q(title__iexact=search_term)),
- exact_slug=cond_int(Q(slug__iexact=search_term)),
- )
- order_by = []
- if qs.filter(exact_title=1).exists():
- order_by.append('-exact_title')
- if qs.filter(exact_slug=1).exists():
- order_by.append('-exact_slug')
- if order_by:
- qs = qs.order_by(*order_by)
- return qs, use_distinct
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement