diff --git a/course/flow.py b/course/flow.py index 33428115501b3356efdd5d1af57f6744b8986caf..72877c42c8876105fe9cf4c4a97239662d99d65c 100644 --- a/course/flow.py +++ b/course/flow.py @@ -504,7 +504,28 @@ def grade_flow_session(fctx, flow_session, current_access_rule, # creator left as NULL gchange.flow_session = flow_session gchange.comment = comment - gchange.save() + + previous_grade_changes = list(GradeChange.objects + .filter( + opportunity=gchange.opportunity, + participation=gchange.participation, + state=gchange.state, + attempt_id=gchange.attempt_id, + flow_session=gchange.flow_session) + .order_by("-grade_time") + [:1]) + + # only save if modified or no previous grades + do_save = True + if previous_grade_changes: + previous_grade_change, = previous_grade_changes + if (previous_grade_change.points == gchange.points + and previous_grade_change.max_points == gchange.max_points + and previous_grade_change.comment == gchange.comment): + do_save = False + + if do_save: + gchange.save() return grade_info