class BallotListView(ModelListView): resource_name = 'Ballots' filters = { 'vote': APIFilters.fkey(lambda u: { 'votequestion__session': u[-2], 'votequestion__number': u[-1] }, help="e.g. /votes/41-1/472/"), 'politician': APIFilters.politician(), 'politician_membership': APIFilters.fkey(lambda u: {'member': u[-1]}, help="e.g. /politicians/roles/326/"), 'ballot': APIFilters.choices('vote', MemberVote), 'dissent': APIFilters.dbfield( 'dissent', help= "does this look like a vote against party line? not reliable for research. True, False" ) } def get_qs(self, request): return MemberVote.objects.all().select_related( 'votequestion').order_by('-votequestion__date', '-votequestion__number') def object_to_dict(self, obj): return obj.to_api_dict(representation='list')
class VoteListView(ModelListView): resource_name = 'Votes' api_notes = mark_safe("""<p>What we call votes are <b>divisions</b> in official Parliamentary lingo. We refer to an individual person's vote as a <a href="/votes/ballots/">ballot</a>.</p> """) filters = { 'session': APIFilters.dbfield(help="e.g. 41-1"), 'yea_total': APIFilters.dbfield(filter_types=APIFilters.numeric_filters, help="# votes for"), 'nay_total': APIFilters.dbfield(filter_types=APIFilters.numeric_filters, help="# votes against, e.g. nay_total__gt=10"), 'paired_total': APIFilters.dbfield(filter_types=APIFilters.numeric_filters, help="paired votes are an odd convention that seem to have stopped in 2011"), 'date': APIFilters.dbfield(filter_types=APIFilters.numeric_filters, help="date__gte=2011-01-01"), 'number': APIFilters.dbfield(filter_types=APIFilters.numeric_filters, help="every vote in a session has a sequential number"), 'bill': APIFilters.fkey(lambda u: { 'bill__sessions': u[-2], 'bill__number': u[-1] }, help="e.g. /bills/41-1/C-10/"), 'result': APIFilters.choices('result', VoteQuestion) } def get_json(self, request, session_id=None): if session_id: return HttpResponseRedirect(urlresolvers.reverse('votes') + '?' + urlencode({'session': session_id})) return super(VoteListView, self).get_json(request) def get_qs(self, request): return VoteQuestion.objects.select_related(depth=1).order_by('-date', '-number') def get_html(self, request, session_id=None): if session_id: session = get_object_or_404(Session, pk=session_id) else: session = Session.objects.current() t = loader.get_template('bills/votequestion_list.html') c = RequestContext(request, { 'object_list': self.get_qs(request).filter(session=session), 'session': session, 'title': 'Votes for the %s' % session }) return HttpResponse(t.render(c))