add poll feature ref #13 as squash commit see also http://support.djangobb.org/topic/333/ (This is a combination of 9 commits.)
This commit is contained in:
parent
725fecaedf
commit
c67ed01f3b
13 changed files with 668 additions and 147 deletions
|
@ -1,13 +1,15 @@
|
|||
from datetime import datetime
|
||||
import os
|
||||
import os.path
|
||||
from hashlib import sha1
|
||||
# coding: utf-8
|
||||
|
||||
from datetime import datetime
|
||||
from hashlib import sha1
|
||||
import os
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.db import models
|
||||
from django.db.models import aggregates
|
||||
from django.db.models.signals import post_save
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from djangobb_forum.fields import AutoOneToOneField, ExtendedImageField, JSONField
|
||||
from djangobb_forum.util import smiles, convert_text_to_html
|
||||
|
@ -410,6 +412,54 @@ class Attachment(models.Model):
|
|||
self.path)
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
|
||||
class Poll(models.Model):
|
||||
topic = models.ForeignKey(Topic)
|
||||
question = models.CharField(max_length=200)
|
||||
choice_count = models.PositiveSmallIntegerField(default=1,
|
||||
help_text=_("How many choices are allowed simultaneously."),
|
||||
)
|
||||
active = models.BooleanField(default=True,
|
||||
help_text=_("Can users vote to this poll or just see the result?"),
|
||||
)
|
||||
deactivate_date = models.DateTimeField(null=True, blank=True,
|
||||
help_text=_("Point of time after this poll would be automatic deactivated"),
|
||||
)
|
||||
users = models.ManyToManyField(User, blank=True, null=True,
|
||||
help_text=_("Users who has voted this poll."),
|
||||
)
|
||||
def auto_deactivate(self):
|
||||
if self.active and self.deactivate_date:
|
||||
now = datetime.now()
|
||||
if now > self.deactivate_date:
|
||||
self.active = False
|
||||
self.save()
|
||||
|
||||
def __unicode__(self):
|
||||
return self.question
|
||||
|
||||
|
||||
class PollChoice(models.Model):
|
||||
poll = models.ForeignKey(Poll, related_name="choices")
|
||||
choice = models.CharField(max_length=200)
|
||||
votes = models.IntegerField(default=0, editable=False)
|
||||
|
||||
def percent(self):
|
||||
if not self.votes:
|
||||
return 0.0
|
||||
result = PollChoice.objects.filter(poll=self.poll).aggregate(aggregates.Sum("votes"))
|
||||
votes_sum = result["votes__sum"]
|
||||
return float(self.votes) / votes_sum * 100
|
||||
|
||||
def __unicode__(self):
|
||||
return self.choice
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
|
||||
from .signals import post_saved, topic_saved
|
||||
|
||||
post_save.connect(post_saved, sender=Post, dispatch_uid='djangobb_post_save')
|
||||
|
|
Reference in a new issue