def get_queryset(self): queryset = super(LinkList, self).get_queryset().order_by('-added') not_on_page = 'page' not in self.request.GET if self.has_query(): queryset = SearchQuerySet().filter(content=AutoQuery( self.request.GET['q']), ).filter_or( categories=AutoQuery(self.request.GET['q'])).filter_or( network_location=AutoQuery(self.request.GET['q'])) if self.has_favourites(): fav_pks = [l.pk for l in self.request.user.favourites.all()] if self.has_query(): queryset = queryset.models(Link).filter(key__in=fav_pks) else: queryset = queryset.filter(id__in=fav_pks).distinct() if self.has_categories(): categories_to_filter = dict(self.request.GET)['categories'] if type(categories_to_filter) == str: categories_to_filter = [categories_to_filter] if self.has_query(): queryset = queryset.models(Link).filter( categories__in=categories_to_filter) else: # At this point, the queryset should already be ordered because # of the original get_queryset call at the beginning of this # function. queryset = queryset.filter( categories__name__in=categories_to_filter).distinct() if self.external_only() or self.internal_only(): if self.has_query(): queryset = queryset.models(Link).exclude( is_external=self.internal_only()) else: # At this point, the queryset should already be ordered because # of the original get_queryset call at the beginning of this # function. queryset = queryset.exclude( is_external=self.internal_only()).distinct() if self.has_query() and not self.has_categories() and not_on_page: # At this point the queryset is a list of SearchResult objects, all # of them. So, the length is accurate. By the time it reaches # context, it won't be. st, created = SearchTerm.objects.get_or_create( query=self.request.GET.get('q')) sq = SearchQuery() sq.term = st sq.results_length = len(queryset) sq.user = self.request.user sq.save() return queryset
def test_query_is_saved(self): st = SearchTerm.objects.create( query='test' ) sq = SearchQuery() sq.term = st sq.results_length = 5 sq.user = self.user sq.save() retrieved_term = SearchTerm.objects.all()[0] retrieved_query = SearchQuery.objects.all()[0] self.assertEquals(retrieved_term.query, 'test') self.assertEquals(retrieved_query.term, retrieved_term)