def change_mark(request, slug): if request.method == "POST": data = json.loads(request.body.decode("utf-8")) grade_system = data.get("grade_system") pk = data.get("pk") new_comment = data.get("comment") new_mark = data.get("mark") if grade_system is not None and pk is not None and new_mark is not None: with reversion.create_revision(): mark, old_mark = MarkAPI.set_mark(grade_system, pk, new_mark) if mark.problem: assignment_hierarchy = "{0:s}/{1:s}/{2:s}".format( mark.problem.task.assignment.name, mark.problem.task.name, mark.problem.name ) elif mark.task: assignment_hierarchy = "{0:s}/{1:s}".format(mark.task.assignment.name, mark.task.name) else: assignment_hierarchy = "{0:s}".format(mark.assignment.name) reversion.set_user(request.user) reversion.set_comment( """Mark for '{0:s}' student, for '{1:s}' assignment was changed from '{2:d}' to '{3:d}' by '{4:s}' user """.format( mark.student.username, assignment_hierarchy, old_mark, mark.mark, request.user.username ) ) if grade_system is not None and pk is not None and new_comment is not None: MarkAPI.set_comment(grade_system, pk, new_comment) return HttpResponse()