Merge pull request #15 from lca2017/chrisjrn/002-abstain
Fixes two bugs in abstain voting
This commit is contained in:
commit
08698e5326
1 changed files with 21 additions and 2 deletions
|
@ -3,8 +3,11 @@ from __future__ import unicode_literals
|
|||
from datetime import datetime
|
||||
from decimal import Decimal
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from django.db import models
|
||||
from django.db.models import Q, F
|
||||
from django.db.models import Case, When, Value
|
||||
from django.db.models.signals import post_save
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
|
@ -16,13 +19,18 @@ from symposion.schedule.models import Presentation
|
|||
|
||||
|
||||
def score_expression():
|
||||
return (
|
||||
score = (
|
||||
(2 * F("plus_two") + F("plus_one")) -
|
||||
(F("minus_one") + 2 * F("minus_two"))
|
||||
) / (
|
||||
F("vote_count") - F("abstain") * 1.0
|
||||
)
|
||||
|
||||
return Case(
|
||||
When(vote_count=F("abstain"), then=Value("0")), # no divide by zero
|
||||
default=score,
|
||||
)
|
||||
|
||||
|
||||
class Votes(object):
|
||||
ABSTAIN = "0"
|
||||
|
@ -120,10 +128,21 @@ class Review(models.Model):
|
|||
# No way to encode "-0" vs. "+0" into an IntegerField, and I don't feel
|
||||
# like some complicated encoding system.
|
||||
vote = models.CharField(max_length=2, blank=True, choices=VOTES.CHOICES, verbose_name=_("Vote"))
|
||||
comment = models.TextField(verbose_name=_("Comment"))
|
||||
comment = models.TextField(
|
||||
blank=True,
|
||||
verbose_name=_("Comment")
|
||||
)
|
||||
comment_html = models.TextField(blank=True)
|
||||
submitted_at = models.DateTimeField(default=datetime.now, editable=False, verbose_name=_("Submitted at"))
|
||||
|
||||
def clean(self):
|
||||
err = {}
|
||||
if self.vote != VOTES.ABSTAIN and not self.comment.strip():
|
||||
err["comment"] = ValidationError(_("You must provide a comment"))
|
||||
|
||||
if err:
|
||||
raise ValidationError(err)
|
||||
|
||||
def save(self, **kwargs):
|
||||
self.comment_html = parse(self.comment)
|
||||
if self.vote:
|
||||
|
|
Loading…
Reference in a new issue