diff --git a/src/courses/views.py b/src/courses/views.py index 671b01a..31e5593 100644 --- a/src/courses/views.py +++ b/src/courses/views.py @@ -6,7 +6,7 @@ """ 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 @@ -14,6 +14,7 @@ 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 @@ -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) @@ -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' @@ -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) diff --git a/src/homeworks/views.py b/src/homeworks/views.py index 9933d64..4fd37e7 100644 --- a/src/homeworks/views.py +++ b/src/homeworks/views.py @@ -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 @@ -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 @@ -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( @@ -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():