From f06a5d2ffbb1a06320935841a4ba24720e651985 Mon Sep 17 00:00:00 2001 From: prathamesh Date: Tue, 13 Feb 2018 12:48:19 +0530 Subject: Change default grading system behaviour Cannot edit default system. Code as per PEP8 standards. Updates grade after regrade or manual grading Field change from total marks to percentage Removed unused fields from grades app --- grades/admin.py | 2 +- grades/forms.py | 9 ++----- grades/migrations/0001_initial.py | 4 +--- grades/migrations/default_grading_system.py | 37 ++++++++++++++++------------- grades/models.py | 3 --- grades/templates/add_grades.html | 10 ++++---- grades/tests/test_models.py | 9 +++---- grades/tests/test_views.py | 11 ++++----- grades/views.py | 9 +++---- yaksh/models.py | 20 +++++++++++----- yaksh/views.py | 23 +++++++++++++++--- 11 files changed, 80 insertions(+), 57 deletions(-) diff --git a/grades/admin.py b/grades/admin.py index ab38f6b..548791e 100644 --- a/grades/admin.py +++ b/grades/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin from grades.models import GradingSystem, GradeRange -# Register your models here. + class GradingSystemAdmin(admin.ModelAdmin): readonly_fields = ('creator',) diff --git a/grades/forms.py b/grades/forms.py index f8c800a..130659d 100644 --- a/grades/forms.py +++ b/grades/forms.py @@ -1,13 +1,8 @@ from grades.models import GradingSystem from django import forms -class GradingSystemForm(forms.ModelForm): - def __init__(self, *args, ** kwargs): - super(GradingSystemForm, self).__init__(*args, **kwargs) - system = getattr(self, 'instance', None) - if system.name == 'default': - self.fields['name'].widget.attrs['readonly'] = True +class GradingSystemForm(forms.ModelForm): class Meta: model = GradingSystem - fields = ['name', 'description', 'can_be_used'] + fields = ['name', 'description'] diff --git a/grades/migrations/0001_initial.py b/grades/migrations/0001_initial.py index 65d711e..04a3006 100644 --- a/grades/migrations/0001_initial.py +++ b/grades/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.5 on 2018-02-02 06:20 +# Generated by Django 1.9.5 on 2018-02-12 11:12 from __future__ import unicode_literals from django.conf import settings @@ -20,7 +20,6 @@ class Migration(migrations.Migration): name='GradeRange', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order', models.IntegerField(default=0)), ('lower_limit', models.FloatField()), ('upper_limit', models.FloatField()), ('grade', models.CharField(max_length=10)), @@ -33,7 +32,6 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255, unique=True)), ('description', models.TextField(default='About the grading system!')), - ('can_be_used', models.BooleanField(default=False)), ('creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), diff --git a/grades/migrations/default_grading_system.py b/grades/migrations/default_grading_system.py index 1629d29..85390d6 100644 --- a/grades/migrations/default_grading_system.py +++ b/grades/migrations/default_grading_system.py @@ -1,24 +1,28 @@ from django.db import migrations + def create_default_system(apps, schema_editor): GradingSystem = apps.get_model('grades', 'GradingSystem') GradeRange = apps.get_model('grades', 'GradeRange') db = schema_editor.connection.alias - default_system = GradingSystem.objects.using(db).create(name='default', - can_be_used=True) - GradeRange.objects.using(db).create(system=default_system, order=1, lower_limit=0, - upper_limit=40, grade='F', description='Fail') - GradeRange.objects.using(db).create(system=default_system, order=2, lower_limit=40, - upper_limit=55, grade='P', description='Pass') - GradeRange.objects.using(db).create(system=default_system, order=3, lower_limit=55, - upper_limit=60, grade='C', description='Average') - GradeRange.objects.using(db).create(system=default_system, order=4, lower_limit=60, - upper_limit=75, grade='B', description='Satisfactory') - GradeRange.objects.using(db).create(system=default_system, order=5, lower_limit=75, - upper_limit=90, grade='A', description='Good') - GradeRange.objects.using(db).create(system=default_system, order=6, lower_limit=90, - upper_limit=101, grade='A+', description='Excellent') + default_system = GradingSystem.objects.using(db).create(name='default') + + graderanges_objects = [ + GradeRange(system=default_system, lower_limit=0, upper_limit=40, + grade='F', description='Fail'), + GradeRange(system=default_system, lower_limit=40, upper_limit=55, + grade='P', description='Pass'), + GradeRange(system=default_system, lower_limit=55, upper_limit=60, + grade='C', description='Average'), + GradeRange(system=default_system, lower_limit=60, upper_limit=75, + grade='B', description='Satisfactory'), + GradeRange(system=default_system, lower_limit=75, upper_limit=90, + grade='A', description='Good'), + GradeRange(system=default_system, lower_limit=90, upper_limit=101, + grade='A+', description='Excellent') + ] + GradeRange.objects.using(db).bulk_create(graderanges_objects) def delete_default_system(apps, schema_editor): @@ -32,5 +36,6 @@ def delete_default_system(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [('grades', '0001_initial'),] - operations = [migrations.RunPython(create_default_system, delete_default_system),] + dependencies = [('grades', '0001_initial'), ] + operations = [migrations.RunPython(create_default_system, + delete_default_system), ] diff --git a/grades/models.py b/grades/models.py index 33895bb..fcea510 100644 --- a/grades/models.py +++ b/grades/models.py @@ -1,12 +1,10 @@ from django.db import models from django.contrib.auth.models import User -# Create your models here. class GradingSystem(models.Model): name = models.CharField(max_length=255, unique=True) description = models.TextField(default='About the grading system!') - can_be_used = models.BooleanField(default=False) creator = models.ForeignKey(User, null=True, blank=True) def get_grade(self, marks): @@ -42,7 +40,6 @@ class GradingSystem(models.Model): class GradeRange(models.Model): system = models.ForeignKey(GradingSystem) - order = models.IntegerField(default=0) lower_limit = models.FloatField() upper_limit = models.FloatField() grade = models.CharField(max_length=10) diff --git a/grades/templates/add_grades.html b/grades/templates/add_grades.html index f2f0051..1e4d29e 100644 --- a/grades/templates/add_grades.html +++ b/grades/templates/add_grades.html @@ -20,9 +20,11 @@
Note: This is a default grading system. You cannot change this.
+ {% endif %}