From aedea8f1939ae9f894670b461abea9bea1be092e Mon Sep 17 00:00:00 2001 From: etienne Date: Fri, 5 Dec 2008 00:16:29 +0000 Subject: Public votes - Polls categories --- polls/models.py | 13 ++++++++++--- polls/views.py | 44 ++++++++++++++++++++++++++++++++++++++------ 2 files changed, 48 insertions(+), 9 deletions(-) (limited to 'polls') diff --git a/polls/models.py b/polls/models.py index acc51d5..f4cf93a 100644 --- a/polls/models.py +++ b/polls/models.py @@ -24,6 +24,12 @@ Models management from django.db import models from django.utils.translation import gettext_lazy as _ +class Category(models.Model): + name = models.CharField(max_length=100) + description = models.TextField() + def __unicode__(self): + return self.name + class PollUser(models.Model): name = models.CharField(max_length=100) email = models.CharField(max_length=100) @@ -34,12 +40,13 @@ class Poll(models.Model): name = models.CharField(max_length=200) description = models.CharField(max_length=1000) author = models.ForeignKey(PollUser) + category = models.ForeignKey(Category, null=True, blank=True) + enddate = models.DateTimeField(null=True, blank=True) base_url = models.CharField(max_length=100) admin_url = models.CharField(max_length=100) modification_date = models.DateTimeField(auto_now=True) - STATUS = (('A', _('Available')), - ('D', _('Disabled')),) - status = models.CharField(max_length=1, choices=STATUS) + public = models.BooleanField(default=False) + open = models.BooleanField(default=True) TYPE = (('P', _('Poll')), ('B', _('Balanced poll')), ('O', _('One choice poll')),) diff --git a/polls/views.py b/polls/views.py index 629caa1..4c6499d 100644 --- a/polls/views.py +++ b/polls/views.py @@ -31,7 +31,7 @@ from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from papillon.settings import LANGUAGES -from papillon.polls.models import Poll, PollUser, Choice, Voter, Vote +from papillon.polls.models import Poll, PollUser, Choice, Voter, Vote, Category def getBaseResponse(request): """Manage basic fields for the template @@ -55,11 +55,23 @@ def index(request): response_dct, redirect = getBaseResponse(request) if redirect: return redirect + response_dct['polls'] = Poll.objects.filter(public=True, category=None) + response_dct['categories'] = Category.objects.all() error = '' if 'bad_poll' in request.GET: response_dct['error'] = _("The poll requested don't exist (anymore?)") return render_to_response('main.html', response_dct) +def category(request, category_id): + "Page for a category" + response_dct, redirect = getBaseResponse(request) + if redirect: + return redirect + category = Category.objects.get(id=int(category_id)) + response_dct['category'] = category + response_dct['polls'] = Poll.objects.filter(public=True, category=category) + return render_to_response('category.html', response_dct) + def createOrEdit(request, admin_url): '''Creation or edition of a poll. admin_url is given to identify a particular poll @@ -103,9 +115,19 @@ def createOrEdit(request, admin_url): author.save() base_url = 'b' + genRandomURL() admin_url = 'a' + genRandomURL() + category = None + if 'poll_category' in request.POST and request.POST['poll_category']: + category = Category.objects.get(id=int(request.POST['poll_category'])) + public = False + if 'poll_public' in request.POST and request.POST['poll_public']: + value = False + if request.POST['poll_public'] == '1': + value = True + public = value poll = Poll(name=request.POST['poll_name'], description=request.POST['poll_desc'], author=author, base_url=base_url, -admin_url=admin_url, status = 'D', type=request.POST['poll_type']) +admin_url=admin_url, type=request.POST['poll_type'], category=category, +public=public) poll.save() url = response_dct['admin_url'] + '/%s/' % poll.admin_url return response_dct, HttpResponseRedirect(url) @@ -126,14 +148,23 @@ admin_url=admin_url, status = 'D', type=request.POST['poll_type']) if 'poll_desc' in request.POST and request.POST['poll_desc']: updated = True poll.description = request.POST['poll_desc'] + if 'poll_open' in request.POST and request.POST['poll_open']: + updated = True + value = False + if request.POST['poll_open'] == '1': + value = True + poll.open = value + if 'poll_public' in request.POST and request.POST['poll_public']: + updated = True + value = False + if request.POST['poll_public'] == '1': + value = True + poll.public = value if updated: poll.save() # base feed of the template - new_dct = {'author_name':poll.author.name, - 'poll_name':poll.name, - 'poll_desc':poll.description, + new_dct = {'poll':poll, 'choices':Choice.objects.filter(poll=poll).order_by('order'), - 'poll_status':poll.status, 'type_name':poll.getTypeLabel()} response_dct.update(new_dct) @@ -180,6 +211,7 @@ admin_url=admin_url, status = 'D', type=request.POST['poll_type']) if redirect: return redirect response_dct['TYPES'] = Poll.TYPE + response_dct['categories'] = Category.objects.all() response_dct['admin_url'] = \ "/".join(request.path.split('/')[:-2]) redirection = None -- cgit v1.2.3