diff --git a/submissions/api.py b/submissions/api.py index 9105d58d..79aea338 100644 --- a/submissions/api.py +++ b/submissions/api.py @@ -643,7 +643,7 @@ def get_latest_score_for_submission(submission_uuid, read_replica=False): return ScoreSerializer(score).data -def reset_score(student_id, course_id, item_id): +def reset_score(student_id, course_id, item_id, clear_state=False): """ Reset scores for a specific student on a specific problem. @@ -655,6 +655,7 @@ def reset_score(student_id, course_id, item_id): student_id (unicode): The ID of the student for whom to reset scores. course_id (unicode): The ID of the course containing the item to reset. item_id (unicode): The ID of the item for which to reset scores. + clear_state (boolean): If True, unlink the Submission and StudentItem so the Submission cannot be accessed. Returns: None @@ -684,6 +685,12 @@ def reset_score(student_id, course_id, item_id): item_id=item_id, ) + if clear_state: + # sever the link between this student item and any submissions it may current have + for sub in student_item.submission_set.all(): + sub.student_item = None + sub.save(update_fields=['student_item']) + except DatabaseError: msg = ( u"Error occurred while reseting scores for" diff --git a/submissions/migrations/0003_submission_null_FK.py b/submissions/migrations/0003_submission_null_FK.py new file mode 100644 index 00000000..9f11cf5c --- /dev/null +++ b/submissions/migrations/0003_submission_null_FK.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('submissions', '0002_auto_20151119_0913'), + ] + + operations = [ + migrations.AlterField( + model_name='submission', + name='student_item', + field=models.ForeignKey(to='submissions.StudentItem', null=True, default=1), + preserve_default=False + ), + ] diff --git a/submissions/models.py b/submissions/models.py index c5c76838..03f13d50 100644 --- a/submissions/models.py +++ b/submissions/models.py @@ -103,7 +103,7 @@ class Submission(models.Model): uuid = UUIDField(version=1, db_index=True) - student_item = models.ForeignKey(StudentItem) + student_item = models.ForeignKey(StudentItem, null=True) # Which attempt is this? Consecutive Submissions do not necessarily have # increasing attempt_number entries -- e.g. re-scoring a buggy problem.