74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
from dataclasses import dataclass
|
|
from typing import Any
|
|
|
|
from django.core.handlers.wsgi import WSGIRequest
|
|
from django.http import HttpResponse
|
|
from django.views.generic import TemplateView
|
|
|
|
from project.main.views.complex_form.reports_state import ReportsState
|
|
from project.main.views.complex_form.route_module_state import RouteModuleState
|
|
from project.main.views.demo_view_base import DemoViewBase
|
|
|
|
|
|
@dataclass
|
|
class FormState:
|
|
route_module: RouteModuleState
|
|
reports: ReportsState
|
|
|
|
def control_state(self) -> None:
|
|
self.route_module.control_state()
|
|
self.reports.control_state()
|
|
|
|
|
|
class ComplexFormView(DemoViewBase):
|
|
template_name = "main/complex_form/container.html"
|
|
active_section = "complex-form"
|
|
title = "Complex Form"
|
|
|
|
def get_context_data(self, **kwargs) -> dict[str, Any]:
|
|
context = super().get_context_data(**kwargs)
|
|
|
|
state = FormState(
|
|
route_module=RouteModuleState.from_form(values={}),
|
|
reports=ReportsState.from_form(values={}),
|
|
)
|
|
state.control_state()
|
|
|
|
context.update(
|
|
{
|
|
"form_state": state,
|
|
}
|
|
)
|
|
return context
|
|
|
|
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse:
|
|
...
|
|
|
|
|
|
class RouteModuleHandleView(TemplateView):
|
|
template_name = "main/complex_form/route_module.html"
|
|
|
|
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse:
|
|
state = RouteModuleState.from_form(values=request.POST)
|
|
state.control_state()
|
|
|
|
return self.render_to_response(
|
|
context={
|
|
"state": state,
|
|
}
|
|
)
|
|
|
|
|
|
class ReportsHandleView(TemplateView):
|
|
template_name = "main/complex_form/reports.html"
|
|
|
|
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse:
|
|
state = ReportsState.from_form(values=request.POST)
|
|
state.control_state()
|
|
|
|
return self.render_to_response(
|
|
context={
|
|
"state": state,
|
|
}
|
|
)
|