Custom form configuration #268
3 changed files with 22 additions and 11 deletions
|
|
@ -6,7 +6,7 @@ from django.db import models
|
||||||
from django.forms.models import ModelForm, ModelFormMetaclass
|
from django.forms.models import ModelForm, ModelFormMetaclass
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from servala.core.models import ServiceInstance, ControlPlaneCRD
|
from servala.core.models import ControlPlaneCRD, ServiceInstance
|
||||||
from servala.frontend.forms.widgets import DynamicArrayField, DynamicArrayWidget
|
from servala.frontend.forms.widgets import DynamicArrayField, DynamicArrayWidget
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ from servala.core.models import Organization, OrganizationInvitation, Organizati
|
||||||
from servala.core.odoo import get_invoice_addresses, get_odoo_countries
|
from servala.core.odoo import get_invoice_addresses, get_odoo_countries
|
||||||
from servala.frontend.forms.mixins import HtmxMixin
|
from servala.frontend.forms.mixins import HtmxMixin
|
||||||
|
|
||||||
|
|
||||||
ORG_NAME_PATTERN = r"[\w\s\-.,&'()+]+"
|
ORG_NAME_PATTERN = r"[\w\s\-.,&'()+]+"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,9 @@ class ServiceOfferingDetailView(OrganizationViewMixin, HtmxViewMixin, DetailView
|
||||||
def context_object(self):
|
def context_object(self):
|
||||||
if self.request.method == "POST":
|
if self.request.method == "POST":
|
||||||
return ControlPlaneCRD.objects.filter(
|
return ControlPlaneCRD.objects.filter(
|
||||||
pk=self.request.POST.get("expert-context", self.request.POST.get("custom-context")),
|
pk=self.request.POST.get(
|
||||||
|
"expert-context", self.request.POST.get("custom-context")
|
||||||
|
),
|
||||||
# Make sure we don’t use a malicious ID
|
# Make sure we don’t use a malicious ID
|
||||||
control_plane__in=self.planes,
|
control_plane__in=self.planes,
|
||||||
).first()
|
).first()
|
||||||
|
|
@ -131,19 +133,27 @@ class ServiceOfferingDetailView(OrganizationViewMixin, HtmxViewMixin, DetailView
|
||||||
control_plane=self.selected_plane, service_offering=self.object
|
control_plane=self.selected_plane, service_offering=self.object
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
|
|
||||||
def get_instance_form_kwargs(self, ignore_data=False):
|
def get_instance_form_kwargs(self, ignore_data=False):
|
||||||
return {"initial": {
|
return {
|
||||||
"organization": self.request.organization,
|
"initial": {
|
||||||
"context": self.context_object,
|
"organization": self.request.organization,
|
||||||
}, "prefix": "expert", "data": self.request.POST if (self.request.method == "POST" and not ignore_data) else None
|
"context": self.context_object,
|
||||||
}
|
},
|
||||||
|
"prefix": "expert",
|
||||||
|
"data": (
|
||||||
|
self.request.POST
|
||||||
|
if (self.request.method == "POST" and not ignore_data)
|
||||||
|
else None
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
def get_instance_form(self, ignore_data=False):
|
def get_instance_form(self, ignore_data=False):
|
||||||
if not self.context_object or not self.context_object.model_form_class:
|
if not self.context_object or not self.context_object.model_form_class:
|
||||||
return
|
return
|
||||||
|
|
||||||
return self.context_object.model_form_class(**self.get_instance_form_kwargs(ignore_data=ignore_data))
|
return self.context_object.model_form_class(
|
||||||
|
**self.get_instance_form_kwargs(ignore_data=ignore_data)
|
||||||
|
)
|
||||||
|
|
||||||
def get_custom_instance_form(self, ignore_data=False):
|
def get_custom_instance_form(self, ignore_data=False):
|
||||||
if not self.context_object or not self.context_object.custom_model_form_class:
|
if not self.context_object or not self.context_object.custom_model_form_class:
|
||||||
|
|
@ -169,7 +179,9 @@ class ServiceOfferingDetailView(OrganizationViewMixin, HtmxViewMixin, DetailView
|
||||||
context["custom_service_form"] = self.get_custom_instance_form()
|
context["custom_service_form"] = self.get_custom_instance_form()
|
||||||
else:
|
else:
|
||||||
context["service_form"] = self.get_instance_form()
|
context["service_form"] = self.get_instance_form()
|
||||||
context["custom_service_form"] = self.get_custom_instance_form(ignore_data=True)
|
context["custom_service_form"] = self.get_custom_instance_form(
|
||||||
|
ignore_data=True
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
context["service_form"] = self.get_instance_form()
|
context["service_form"] = self.get_instance_form()
|
||||||
context["custom_service_form"] = self.get_custom_instance_form()
|
context["custom_service_form"] = self.get_custom_instance_form()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue