Start offering page with visible form
This commit is contained in:
parent
8a1f72b317
commit
172bdd7261
2 changed files with 35 additions and 17 deletions
|
@ -25,7 +25,9 @@ class ServiceFilterForm(forms.Form):
|
|||
|
||||
class ControlPlaneSelectForm(forms.Form):
|
||||
control_plane = forms.ModelChoiceField(
|
||||
queryset=ControlPlane.objects.none(), label=_("Service Provider Zone")
|
||||
queryset=ControlPlane.objects.none(),
|
||||
label=_("Service Provider Zone"),
|
||||
empty_label=None,
|
||||
)
|
||||
|
||||
def __init__(self, *args, planes=None, **kwargs):
|
||||
|
|
|
@ -68,26 +68,42 @@ class ServiceOfferingDetailView(OrganizationViewMixin, HtmxViewMixin, DetailView
|
|||
data = None
|
||||
if "control_plane" in self.request.GET:
|
||||
data = self.request.GET
|
||||
elif self.request.method == "POST" and self.context_object:
|
||||
data = {"control_plane": self.context_object.control_plane_id}
|
||||
return ControlPlaneSelectForm(data=data, planes=self.planes)
|
||||
|
||||
@cached_property
|
||||
def selected_plane(self):
|
||||
if self.select_form.data and self.select_form.is_valid():
|
||||
return self.select_form.cleaned_data["control_plane"]
|
||||
field = self.select_form.fields["control_plane"]
|
||||
return field.initial or field.queryset.first()
|
||||
|
||||
@cached_property
|
||||
def context_object(self):
|
||||
if self.request.method == "POST":
|
||||
return ServiceOfferingControlPlane.objects.filter(
|
||||
pk=self.request.POST.get("context"),
|
||||
# Make sure we don’t use a malicious ID
|
||||
control_plane__in=self.planes,
|
||||
).first()
|
||||
return ServiceOfferingControlPlane.objects.filter(
|
||||
control_plane=self.selected_plane, service_offering=self.object
|
||||
).first()
|
||||
|
||||
def get_instance_form(self):
|
||||
return self.context_object.model_form_class(
|
||||
data=self.request.POST if self.request.method == "POST" else None,
|
||||
initial={
|
||||
"organization": self.request.organization,
|
||||
"context": self.context_object,
|
||||
},
|
||||
)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["select_form"] = self.select_form
|
||||
context["has_control_planes"] = self.planes.exists()
|
||||
if "control_plane" in self.request.GET:
|
||||
if self.select_form.is_valid():
|
||||
context["selected_plane"] = self.select_form.cleaned_data[
|
||||
"control_plane"
|
||||
]
|
||||
try:
|
||||
so_cp = ServiceOfferingControlPlane.objects.filter(
|
||||
control_plane=self.select_form.cleaned_data["control_plane"],
|
||||
service_offering=self.object,
|
||||
).first()
|
||||
if not so_cp:
|
||||
context["form_error"] = True
|
||||
except Exception:
|
||||
context["form_error"] = True
|
||||
else:
|
||||
context["service_form"] = so_cp.model_form_class()
|
||||
context["selected_plane"] = self.selected_plane
|
||||
context["service_form"] = self.get_instance_form()
|
||||
return context
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue