Problem
When filling out a homework submission form, if the user navigates away or page becomes inactive and so on, all entered answers are lost. Users must start over from scratch.
Proposed Solution
Add a "Save Draft" button alongside the existing "Submit" button that allows users to save their progress without finalizing the submission.
Implementation Options
Option A: Minimal (different message only)
- Add "Save Draft" button to the form
- Both buttons save to database identically
- Only the success message differs
- Pros: No migration, minimal code changes
- Cons: Course page shows "Submitted" for drafts (since a submission record exists)
Option B: Full (with draft status tracking)
- Add
is_draft boolean field to Submission model
- Add "Save Draft" button to the form
- Drafts show "Open" (or "Draft") on course page instead of "Submitted"
- Pros: Clear distinction between draft and submitted
- Cons: Requires migration
Files affected
courses/models/homework.py - Add is_draft field (Option B only)
courses/views/homework.py - Handle is_draft parameter
courses/templates/homework/homework.html - Add Save Draft button
courses/views/course.py - Check is_draft when setting status (Option B only)
UI Mockup
- Save Draft: Secondary button, saves answers with draft message
- Submit: Primary button, finalizes submission (existing behavior)
Testing
Run existing tests to ensure no regressions:
uv run python manage.py test courses.tests.test_homework
uv run python manage.py test courses.tests.test_course
Manual testing checklist
- Save draft on new homework → answers persist after page refresh
- Save draft → course page shows correct status (Open/Draft vs Submitted depending on option)
- Submit after saving draft → status changes to "Submitted"
- Scoring still works correctly for submitted homeworks
- Admin views show correct submission counts
Problem
When filling out a homework submission form, if the user navigates away or page becomes inactive and so on, all entered answers are lost. Users must start over from scratch.
Proposed Solution
Add a "Save Draft" button alongside the existing "Submit" button that allows users to save their progress without finalizing the submission.
Implementation Options
Option A: Minimal (different message only)
Option B: Full (with draft status tracking)
is_draftboolean field toSubmissionmodelFiles affected
courses/models/homework.py- Addis_draftfield (Option B only)courses/views/homework.py- Handleis_draftparametercourses/templates/homework/homework.html- Add Save Draft buttoncourses/views/course.py- Checkis_draftwhen setting status (Option B only)UI Mockup
Testing
Run existing tests to ensure no regressions:
Manual testing checklist