1st commit
This commit is contained in:
223
polls/views.py
Normal file
223
polls/views.py
Normal file
@@ -0,0 +1,223 @@
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.paginator import Paginator
|
||||
from django.db.models import Count
|
||||
from django.contrib import messages
|
||||
from .models import Poll, Choice, Vote
|
||||
from .forms import PollAddForm, EditPollForm, ChoiceAddForm
|
||||
from django.http import HttpResponse
|
||||
|
||||
|
||||
@login_required()
|
||||
def polls_list(request):
|
||||
all_polls = Poll.objects.all()
|
||||
search_term = ''
|
||||
if 'name' in request.GET:
|
||||
all_polls = all_polls.order_by('text')
|
||||
|
||||
if 'date' in request.GET:
|
||||
all_polls = all_polls.order_by('pub_date')
|
||||
|
||||
if 'vote' in request.GET:
|
||||
all_polls = all_polls.annotate(Count('vote')).order_by('vote__count')
|
||||
|
||||
if 'search' in request.GET:
|
||||
search_term = request.GET['search']
|
||||
all_polls = all_polls.filter(text__icontains=search_term)
|
||||
|
||||
paginator = Paginator(all_polls, 6) # Show 6 contacts per page
|
||||
page = request.GET.get('page')
|
||||
polls = paginator.get_page(page)
|
||||
|
||||
get_dict_copy = request.GET.copy()
|
||||
params = get_dict_copy.pop('page', True) and get_dict_copy.urlencode()
|
||||
|
||||
context = {
|
||||
'polls': polls,
|
||||
'params': params,
|
||||
'search_term': search_term,
|
||||
}
|
||||
return render(request, 'polls/polls_list.html', context)
|
||||
|
||||
|
||||
@login_required()
|
||||
def list_by_user(request):
|
||||
all_polls = Poll.objects.filter(owner=request.user)
|
||||
paginator = Paginator(all_polls, 7) # Show 7 contacts per page
|
||||
|
||||
page = request.GET.get('page')
|
||||
polls = paginator.get_page(page)
|
||||
|
||||
context = {
|
||||
'polls': polls,
|
||||
}
|
||||
return render(request, 'polls/polls_list.html', context)
|
||||
|
||||
|
||||
@login_required()
|
||||
def polls_add(request):
|
||||
if request.user.has_perm('polls.add_poll'):
|
||||
if request.method == 'POST':
|
||||
form = PollAddForm(request.POST)
|
||||
if form.is_valid:
|
||||
poll = form.save(commit=False)
|
||||
poll.owner = request.user
|
||||
poll.save()
|
||||
Choice(
|
||||
poll=poll, choice_text=form.cleaned_data['choice1']).save()
|
||||
Choice(
|
||||
poll=poll, choice_text=form.cleaned_data['choice2']).save()
|
||||
|
||||
messages.success(
|
||||
request, "Poll & Choices added successfully.", extra_tags='alert alert-success alert-dismissible fade show')
|
||||
|
||||
return redirect('polls:list')
|
||||
else:
|
||||
form = PollAddForm()
|
||||
context = {
|
||||
'form': form,
|
||||
}
|
||||
return render(request, 'polls/add_poll.html', context)
|
||||
else:
|
||||
return HttpResponse("Sorry but you don't have permission to do that!")
|
||||
|
||||
|
||||
@login_required
|
||||
def polls_edit(request, poll_id):
|
||||
poll = get_object_or_404(Poll, pk=poll_id)
|
||||
if request.user != poll.owner:
|
||||
return redirect('home')
|
||||
|
||||
if request.method == 'POST':
|
||||
form = EditPollForm(request.POST, instance=poll)
|
||||
if form.is_valid:
|
||||
form.save()
|
||||
messages.success(request, "Poll Updated successfully.",
|
||||
extra_tags='alert alert-success alert-dismissible fade show')
|
||||
return redirect("polls:list")
|
||||
|
||||
else:
|
||||
form = EditPollForm(instance=poll)
|
||||
|
||||
return render(request, "polls/poll_edit.html", {'form': form, 'poll': poll})
|
||||
|
||||
|
||||
@login_required
|
||||
def polls_delete(request, poll_id):
|
||||
poll = get_object_or_404(Poll, pk=poll_id)
|
||||
if request.user != poll.owner:
|
||||
return redirect('home')
|
||||
poll.delete()
|
||||
messages.success(request, "Poll Deleted successfully.",
|
||||
extra_tags='alert alert-success alert-dismissible fade show')
|
||||
return redirect("polls:list")
|
||||
|
||||
|
||||
@login_required
|
||||
def add_choice(request, poll_id):
|
||||
poll = get_object_or_404(Poll, pk=poll_id)
|
||||
if request.user != poll.owner:
|
||||
return redirect('home')
|
||||
|
||||
if request.method == 'POST':
|
||||
form = ChoiceAddForm(request.POST)
|
||||
if form.is_valid:
|
||||
new_choice = form.save(commit=False)
|
||||
new_choice.poll = poll
|
||||
new_choice.save()
|
||||
messages.success(
|
||||
request, "Choice added successfully.", extra_tags='alert alert-success alert-dismissible fade show')
|
||||
return redirect('polls:edit', poll.id)
|
||||
else:
|
||||
form = ChoiceAddForm()
|
||||
context = {
|
||||
'form': form,
|
||||
}
|
||||
return render(request, 'polls/add_choice.html', context)
|
||||
|
||||
|
||||
@login_required
|
||||
def choice_edit(request, choice_id):
|
||||
choice = get_object_or_404(Choice, pk=choice_id)
|
||||
poll = get_object_or_404(Poll, pk=choice.poll.id)
|
||||
if request.user != poll.owner:
|
||||
return redirect('home')
|
||||
|
||||
if request.method == 'POST':
|
||||
form = ChoiceAddForm(request.POST, instance=choice)
|
||||
if form.is_valid:
|
||||
new_choice = form.save(commit=False)
|
||||
new_choice.poll = poll
|
||||
new_choice.save()
|
||||
messages.success(
|
||||
request, "Choice Updated successfully.", extra_tags='alert alert-success alert-dismissible fade show')
|
||||
return redirect('polls:edit', poll.id)
|
||||
else:
|
||||
form = ChoiceAddForm(instance=choice)
|
||||
context = {
|
||||
'form': form,
|
||||
'edit_choice': True,
|
||||
'choice': choice,
|
||||
}
|
||||
return render(request, 'polls/add_choice.html', context)
|
||||
|
||||
|
||||
@login_required
|
||||
def choice_delete(request, choice_id):
|
||||
choice = get_object_or_404(Choice, pk=choice_id)
|
||||
poll = get_object_or_404(Poll, pk=choice.poll.id)
|
||||
if request.user != poll.owner:
|
||||
return redirect('home')
|
||||
choice.delete()
|
||||
messages.success(
|
||||
request, "Choice Deleted successfully.", extra_tags='alert alert-success alert-dismissible fade show')
|
||||
return redirect('polls:edit', poll.id)
|
||||
|
||||
|
||||
def poll_detail(request, poll_id):
|
||||
poll = get_object_or_404(Poll, id=poll_id)
|
||||
|
||||
if not poll.active:
|
||||
return render(request, 'polls/poll_result.html', {'poll': poll})
|
||||
loop_count = poll.choice_set.count()
|
||||
context = {
|
||||
'poll': poll,
|
||||
'loop_time': range(0, loop_count),
|
||||
}
|
||||
return render(request, 'polls/poll_detail.html', context)
|
||||
|
||||
|
||||
@login_required
|
||||
def poll_vote(request, poll_id):
|
||||
poll = get_object_or_404(Poll, pk=poll_id)
|
||||
choice_id = request.POST.get('choice')
|
||||
if not poll.user_can_vote(request.user):
|
||||
messages.error(
|
||||
request, "You already voted this poll!", extra_tags='alert alert-warning alert-dismissible fade show')
|
||||
return redirect("polls:list")
|
||||
|
||||
if choice_id:
|
||||
choice = Choice.objects.get(id=choice_id)
|
||||
vote = Vote(user=request.user, poll=poll, choice=choice)
|
||||
vote.save()
|
||||
print(vote)
|
||||
return render(request, 'polls/poll_result.html', {'poll': poll})
|
||||
else:
|
||||
messages.error(
|
||||
request, "No choice selected!", extra_tags='alert alert-warning alert-dismissible fade show')
|
||||
return redirect("polls:detail", poll_id)
|
||||
return render(request, 'polls/poll_result.html', {'poll': poll})
|
||||
|
||||
|
||||
@login_required
|
||||
def end_poll(request, poll_id):
|
||||
poll = get_object_or_404(Poll, pk=poll_id)
|
||||
if request.user != poll.owner:
|
||||
return redirect('home')
|
||||
|
||||
if poll.active is True:
|
||||
poll.active = False
|
||||
poll.save()
|
||||
return render(request, 'polls/poll_result.html', {'poll': poll})
|
||||
else:
|
||||
return render(request, 'polls/poll_result.html', {'poll': poll})
|
||||
Reference in New Issue
Block a user