1
1
from django.db import models
2
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)
5
11
class PollManager(models.Manager):
7
return self.all().exclude(closed_date__lte=datetime.datetime.now)
14
return self.all().exclude(closed_date__lte=datetime.datetime.now())
9
17
class Poll(models.Model):
10
18
name = models.CharField(max_length=256)
11
pub_date = models.DateTimeField("date published", default = datetime.datetime.now)
12
closed_date = models.DateTimeField("date closed", default= lambda: datetime.datetime.now() + datetime.timedelta(days=90),
13
blank=True, null=True)
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)
15
24
objects = PollManager()
17
26
def total_votes(self):
18
return self.choices.all().aggregate(models.Sum("votes"))["votes__sum"]
27
return self.choices.all().aggregate(models.Sum('votes'))['votes__sum']
20
29
def has_user_voted(self, u):
21
30
return u.poll_votes.filter(poll=self).count() > 0
26
35
return self.closed_date < datetime.datetime.now()
29
37
def get_absolute_url(self):
30
return ('wlpoll_detail', None, {'object_id': self.id})
38
return reverse('wlpoll_detail', kwargs={'pk': self.id})
32
def __unicode__(self):
35
44
class Choice(models.Model):
36
poll = models.ForeignKey(Poll, related_name="choices")
45
poll = models.ForeignKey(Poll, related_name='choices')
37
46
choice = models.CharField(max_length=256)
38
47
votes = models.PositiveIntegerField(default=0)
40
def __unicode__(self):
41
return u"%i:%s" % (self.votes,self.choice)
50
return "%i:%s" % (self.votes, self.choice)
43
53
class Vote(models.Model):
44
user = models.ForeignKey(User, related_name="poll_votes")
54
user = models.ForeignKey(User, related_name='poll_votes')
45
55
poll = models.ForeignKey(Poll)
46
56
choice = models.ForeignKey(Choice)
47
date_voted = models.DateTimeField("voted at", default = datetime.datetime.now)
57
date_voted = models.DateTimeField(
58
'voted at', default=datetime.datetime.now)