Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/courses/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
"""

from dataclasses import dataclass
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, Any
from uuid import UUID
from django.views import View
from django.http import HttpRequest, HttpResponse, HttpResponseForbidden
from django.shortcuts import render, redirect, get_object_or_404
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.forms.formsets import BaseFormSet

if TYPE_CHECKING:
from homeworks.forms import HomeworkCreateForm, SectionFormSet
Expand Down Expand Up @@ -294,6 +295,8 @@ def get(self, request: HttpRequest, course_id: UUID) -> HttpResponse:
if not has_access:
return HttpResponseForbidden("You do not have access to this course.")

assert user_type is not None

# Get the appropriate data based on user type
data = self._get_view_data(course, user_type, teacher_profile, student_profile)

Expand Down Expand Up @@ -368,7 +371,7 @@ class HomeworkFormData:
"""Data structure for homework form view."""

form: "HomeworkCreateForm"
section_forms: "SectionFormSet"
section_forms: BaseFormSet[Any]
course_name: str
course_id: UUID
action: str # 'create'
Expand Down Expand Up @@ -464,7 +467,7 @@ def _process_form_submission(

# Create a mutable copy of POST data and inject course
post_data = request.POST.copy()
post_data["course"] = course.id
post_data["course"] = str(course.id)

# Create forms from POST data
form = HomeworkCreateForm(post_data)
Expand Down
17 changes: 6 additions & 11 deletions src/homeworks/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
"""

from dataclasses import dataclass
from typing import TYPE_CHECKING, Dict, Any, assert_type
from typing import TYPE_CHECKING, Dict, Any
from uuid import UUID
from django.forms import formset_factory
from django.forms.formsets import BaseFormSet

if TYPE_CHECKING:
from django.forms.utils import ErrorDict, ErrorList
Expand Down Expand Up @@ -262,7 +263,7 @@ class HomeworkFormData:
"""Data structure for the homework form view."""

form: "HomeworkEditForm"
section_forms: "SectionFormSet"
section_forms: BaseFormSet[Any]
user_type: str
action: str # 'create' or 'edit'
is_submitted: bool = False
Expand Down Expand Up @@ -370,13 +371,9 @@ def _get_view_data(
initial_section_data.append(section_data)

# Create section formset with initial data
SectionFormset: type[SectionFormSet] = formset_factory(
SectionForm, extra=0, formset=SectionFormSet
)
section_formset = SectionFormset(
section_formset = formset_factory(SectionForm, extra=0, formset=SectionFormSet)(
prefix="sections", initial=initial_section_data
)
assert_type(section_formset, SectionFormSet)

# Return form data
return HomeworkFormData(
Expand All @@ -395,11 +392,9 @@ def _process_form_submission(
form = HomeworkEditForm(request.POST, instance=homework)

# Create formset for sections
SectionFormset: type[SectionFormSet] = formset_factory(
SectionForm, extra=0, formset=SectionFormSet
section_formset = formset_factory(SectionForm, extra=0, formset=SectionFormSet)(
request.POST, prefix="sections"
)
section_formset = SectionFormset(request.POST, prefix="sections")
assert_type(section_formset, SectionFormSet)

# Check form validity
if form.is_valid() and section_formset.is_valid():
Expand Down
Loading