Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- result_list = []
- page_list = Page.objects.filter(Q(title__icontains=cleaned_search_term) | Q(body__icontains=cleaned_search_term))
- article_list = Article.objects.filter(Q(title__icontains=cleaned_search_term) | Q(body__icontains=cleaned_search_term) | Q(tags__icontains=cleaned_search_term))
- post_list = Post.objects.filter(Q(title__icontains=cleaned_search_term) | Q(body__icontains=cleaned_search_term) | Q(tags__icontains=cleaned_search_term))
- for x in page_list:
- result_list.append(x)
- for x in article_list:
- result_list.append(x)
- for x in post_list:
- result_list.append(x)
- return object_list(request, queryset=result_list, template_object_name='result',
- paginate_by=10, extra_context={'search_term': search_term},
- template_name="search/result_list.html")
- from itertools import chain
- result_list = list(chain(page_list, article_list, post_list))
- result_list = sorted(
- chain(page_list, article_list, post_list),
- key=lambda instance: instance.date_created)
- from operator import attrgetter
- result_list = sorted(
- chain(page_list, article_list, post_list),
- key=attrgetter('date_created'))
- from itertools import islice, chain
- class QuerySetChain(object):
- """
- Chains multiple subquerysets (possibly of different models) and behaves as
- one queryset. Supports minimal methods needed for use with
- django.core.paginator.
- """
- def __init__(self, *subquerysets):
- self.querysets = subquerysets
- def count(self):
- """
- Performs a .count() for all subquerysets and returns the number of
- records as an integer.
- """
- return sum(qs.count() for qs in self.querysets)
- def _clone(self):
- "Returns a clone of this queryset chain"
- return self.__class__(*self.querysets)
- def _all(self):
- "Iterates records in all subquerysets"
- return chain(*self.querysets)
- def __getitem__(self, ndx):
- """
- Retrieves an item or slice from the chained set of results from all
- subquerysets.
- """
- if type(ndx) is slice:
- return list(islice(self._all(), ndx.start, ndx.stop, ndx.step or 1))
- else:
- return islice(self._all(), ndx, ndx+1).next()
- pages = Page.objects.filter(Q(title__icontains=cleaned_search_term) |
- Q(body__icontains=cleaned_search_term))
- articles = Article.objects.filter(Q(title__icontains=cleaned_search_term) |
- Q(body__icontains=cleaned_search_term) |
- Q(tags__icontains=cleaned_search_term))
- posts = Post.objects.filter(Q(title__icontains=cleaned_search_term) |
- Q(body__icontains=cleaned_search_term) |
- Q(tags__icontains=cleaned_search_term))
- matches = QuerySetChain(pages, articles, posts)
- matches = pages | articles | posts
Add Comment
Please, Sign In to add comment