This repository has been archived by the owner on Nov 3, 2021. It is now read-only.
/
views.py
53 lines (40 loc) · 1.7 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from haystack.views import SearchView
import jingo
from feedback.models import Opinion, Term
from feedback import stats, FIREFOX
class OpinionSearchView(SearchView):
def get_results(self):
"""If no query is selected, browse dataset."""
if self.form.is_valid() and not self.query:
return Opinion.objects.browse(**self.form.cleaned_data)
else:
return super(OpinionSearchView, self).get_results()
def extra_context(self):
"""Gather sentiments/trends/demographic info for these search results."""
extra = super(OpinionSearchView, self).extra_context()
# TODO make sure this won't issue millions of queries
opinion_pks = [ res.pk for res in self.results ]
# Aggregates:
opinions = Opinion.objects.filter(pk__in=opinion_pks)
extra['sent'] = stats.sentiment(qs=opinions)
extra['demo'] = stats.demographics(qs=opinions)
frequent_terms = Term.objects.frequent().filter(
used_in__in=opinion_pks)[:20]
extra['terms'] = stats.frequent_terms(qs=frequent_terms)
# TODO this is a lame way to generate search URLs
extra['prod'] = FIREFOX.short
return extra
def create_response(self):
"""
Generates the actual HttpResponse to send back to the user.
The same as Haystack's stock SearchView, except for Jinja2 rendering.
"""
(paginator, page) = self.build_page()
context = {
'query': self.query,
'form': self.form,
'page': page,
'paginator': paginator,
}
context.update(self.extra_context())
return jingo.render(self.request, self.template, context)