def index(request): if not _is_active(): return render_to_response('over.html', {}, context_instance=RequestContext(request)) if request.method == 'POST': form = VoteForm(request.POST) if form.is_valid(): form.save(commit=True) return HttpResponseRedirect(reverse('done')) else: form = VoteForm() return render_to_response('index.html', { 'form': form, }, context_instance=RequestContext(request))
def detail(request, profile_id): profile = get_object_or_404(Profile, pk=profile_id) if request.method == 'POST' and request.POST['action'] == "create": comment_form = CommentForm(request.POST, ) if comment_form.is_valid(): obj = comment_form.save(commit=False) obj.user = request.user obj.profile = profile obj.save() else: comment_form = CommentForm() if request.method == 'POST' and request.POST['action'] == "vote": try: v = Vote.objects.get(for_whom=profile.owner, from_whom=request.user) vote_form = VoteForm(request.POST, instance=v) except Vote.DoesNotExist: vote_form = VoteForm(request.POST) if vote_form.is_valid(): obj = vote_form.save(commit=False) obj.from_whom = request.user obj.for_whom = profile obj.save() else: vote_form = VoteForm() context = { 'profile': profile, 'comment_form': comment_form, 'vote_form': vote_form, } return render(request, 'profiles/detail.html', context)
def election(request, electionid): election = get_object_or_404(Election, pk=electionid) if not election.isopen: raise Http404("This election is not open (yet)") if election.startdate > date.today(): raise Http404("This election has not started yet") if election.enddate < date.today(): # Election is closed, consider publishing the results if not election.resultspublic: # If user is an admin, show anyway, otherwise throw an error if not request.user.is_superuser: raise Http404("The results for this election isn't published yet.") # Ok, so we do have the results. Use a custom query to make sure we get decently formatted data # and no client-side ORM aggregation curs = connection.cursor() curs.execute("SELECT c.name, sum(v.score) AS score FROM elections_candidate c INNER JOIN elections_vote v ON c.id=v.candidate_id WHERE v.election_id=%(election)s AND c.election_id=%(election)s GROUP BY c.name ORDER BY 2 DESC", { 'election': election.pk, }) res = curs.fetchall() if len(res) == 0: raise Http404('No results found for this election') return render_to_response('elections/results.html', { 'election': election, 'topscore': res[0][1], 'scores': [{'name': r[0], 'score': r[1], 'width': 300*r[1]/res[0][1]} for r in res], }, context_instance=RequestContext(request)) if len(election.candidate_set.all()) <= 0: raise Http404("This election has no candidates!") # Otherwise, we show up the form. This part requires login if not request.user.is_authenticated(): return HttpResponseRedirect("/login/?next=%s" % request.path) try: member = Member.objects.get(user=request.user) # Make sure member has paid if not member.paiduntil: return render_to_response('elections/mustbemember.html', {}, context_instance=RequestContext(request)) # Make sure that the membership hasn't expired if member.paiduntil < date.today(): return render_to_response('elections/mustbemember.html', {}, context_instance=RequestContext(request)) # Verify that the user has been a member for at least 28 days. if member.membersince > election.startdate - timedelta(days=28): return render_to_response('elections/memberfourweeks.html', { 'registered_at': member.paiduntil - timedelta(days=365), 'mustregbefore': election.startdate - timedelta(days=28), 'election': election, }, context_instance=RequestContext(request)) except Member.DoesNotExist: return render_to_response('elections/mustbemember.html', {}, context_instance=RequestContext(request)) if request.method == "POST": form = VoteForm(election, member, data=request.POST) if form.is_valid(): # Save the form form.save() else: # Not a POST, so generate an empty form form = VoteForm(election, member) return render_to_response('elections/form.html', { 'form': form, 'election': election, }, context_instance=RequestContext(request))