1
from django.db import models
2
from django.contrib.auth.models import User
3
from django.urls import reverse
7
def closed_date_default():
8
return datetime.datetime.now() + datetime.timedelta(days=90)
11
class PollManager(models.Manager):
14
return self.all().exclude(closed_date__lte=datetime.datetime.now())
17
class Poll(models.Model):
18
name = models.CharField(max_length=256)
19
pub_date = models.DateTimeField(
20
'date published', default=datetime.datetime.now)
21
closed_date = models.DateTimeField('date closed', default=closed_date_default,
22
blank=True, null=True)
24
objects = PollManager()
26
def total_votes(self):
27
return self.choices.all().aggregate(models.Sum('votes'))['votes__sum']
29
def has_user_voted(self, u):
30
return u.poll_votes.filter(poll=self).count() > 0
33
if self.closed_date is None:
35
return self.closed_date < datetime.datetime.now()
37
def get_absolute_url(self):
38
return reverse('wlpoll_detail', kwargs={'pk': self.id})
40
def __unicode__(self):
44
class Choice(models.Model):
45
poll = models.ForeignKey(Poll, related_name='choices')
46
choice = models.CharField(max_length=256)
47
votes = models.PositiveIntegerField(default=0)
49
def __unicode__(self):
50
return u"%i:%s" % (self.votes, self.choice)
53
class Vote(models.Model):
54
user = models.ForeignKey(User, related_name='poll_votes')
55
poll = models.ForeignKey(Poll)
56
choice = models.ForeignKey(Choice)
57
date_voted = models.DateTimeField(
58
'voted at', default=datetime.datetime.now)