From 67667a6883a997fb503040ecedb1704eac34aed7 Mon Sep 17 00:00:00 2001 From: Marko Jevtic Date: Thu, 10 May 2018 14:19:30 +0200 Subject: [PATCH] [NDPD-1222] Submissions should allow score points to have a decimal value --- submissions/__init__.py | 2 +- .../migrations/0006_auto_20180510_0732.py | 26 +++++++++++++++++++ submissions/models.py | 24 ++++++++++++----- 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 submissions/migrations/0006_auto_20180510_0732.py diff --git a/submissions/__init__.py b/submissions/__init__.py index 6e55efde..e5e7f188 100644 --- a/submissions/__init__.py +++ b/submissions/__init__.py @@ -1 +1 @@ -__version__ = u'2.0.14' +__version__ = u'2.0.15' diff --git a/submissions/migrations/0006_auto_20180510_0732.py b/submissions/migrations/0006_auto_20180510_0732.py new file mode 100644 index 00000000..c3d9fe4c --- /dev/null +++ b/submissions/migrations/0006_auto_20180510_0732.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +from decimal import Decimal +import django.core.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('submissions', '0005_remove_django_extensions'), + ] + + operations = [ + migrations.AlterField( + model_name='score', + name='points_earned', + field=models.DecimalField(default=Decimal('0.0'), max_digits=6, decimal_places=2, validators=[django.core.validators.MinValueValidator(Decimal('0.0'))]), + ), + migrations.AlterField( + model_name='score', + name='points_possible', + field=models.DecimalField(default=Decimal('0.0'), max_digits=6, decimal_places=2, validators=[django.core.validators.MinValueValidator(Decimal('0.0'))]), + ), + ] diff --git a/submissions/models.py b/submissions/models.py index d9b72c67..26a91db9 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -10,8 +10,10 @@ """ import logging +from decimal import Decimal from uuid import uuid4 +from django.core.validators import MinValueValidator from django.db import models, DatabaseError from django.db.models.signals import post_save from django.dispatch import receiver, Signal @@ -177,8 +179,18 @@ class Score(models.Model): """ student_item = models.ForeignKey(StudentItem) submission = models.ForeignKey(Submission, null=True) - points_earned = models.PositiveIntegerField(default=0) - points_possible = models.PositiveIntegerField(default=0) + points_earned = models.DecimalField( + decimal_places=2, + default=Decimal('0.0'), + max_digits=6, + validators=[MinValueValidator(Decimal('0.0'))] + ) + points_possible = models.DecimalField( + decimal_places=2, + default=Decimal('0.0'), + max_digits=6, + validators=[MinValueValidator(Decimal('0.0'))] + ) created_at = models.DateTimeField(editable=False, default=now, db_index=True) # Flag to indicate that this score should reset the current "highest" score @@ -214,9 +226,9 @@ def to_float(self): float or None """ - if self.points_possible == 0: + if self.points_possible == Decimal('0.0'): return None - return float(self.points_earned) / self.points_possible + return float(self.points_earned / self.points_possible) def __repr__(self): return repr(dict( @@ -236,7 +248,7 @@ def is_hidden(self): bool: Whether the score should be hidden. """ - return self.points_possible == 0 + return self.points_possible == Decimal('0.0') @classmethod def create_reset_score(cls, student_item): @@ -264,7 +276,7 @@ def create_reset_score(cls, student_item): student_item=student_item, submission=None, points_earned=0, - points_possible=0, + points_possible=Decimal('0.0'), reset=True, )