예제 #1
0
파일: views.py 프로젝트: honza/vote
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))
예제 #2
0
파일: views.py 프로젝트: kkkka/django-tasks
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)
예제 #3
0
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))