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):
|
class ControlPlaneSelectForm(forms.Form):
|
||||||
control_plane = forms.ModelChoiceField(
|
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):
|
def __init__(self, *args, planes=None, **kwargs):
|
||||||
|
|
|
@ -68,26 +68,42 @@ class ServiceOfferingDetailView(OrganizationViewMixin, HtmxViewMixin, DetailView
|
||||||
data = None
|
data = None
|
||||||
if "control_plane" in self.request.GET:
|
if "control_plane" in self.request.GET:
|
||||||
data = 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)
|
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):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
context["select_form"] = self.select_form
|
context["select_form"] = self.select_form
|
||||||
context["has_control_planes"] = self.planes.exists()
|
context["has_control_planes"] = self.planes.exists()
|
||||||
if "control_plane" in self.request.GET:
|
context["selected_plane"] = self.selected_plane
|
||||||
if self.select_form.is_valid():
|
context["service_form"] = self.get_instance_form()
|
||||||
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()
|
|
||||||
return context
|
return context
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue