Move fieldset nesting one level down
This commit is contained in:
parent
e6182f8e08
commit
90d43d1ed2
1 changed files with 28 additions and 37 deletions
|
@ -205,8 +205,8 @@ class CrdModelFormMixin:
|
||||||
|
|
||||||
def strip_title(self, field_name, label):
|
def strip_title(self, field_name, label):
|
||||||
field = self.fields[field_name]
|
field = self.fields[field_name]
|
||||||
if field and field.label.startswith(label):
|
if field and (position := field.label.find(label)) != -1:
|
||||||
field.label = field.label[len(label) :]
|
field.label = field.label[position + len(label) :]
|
||||||
|
|
||||||
def get_fieldsets(self):
|
def get_fieldsets(self):
|
||||||
fieldsets = []
|
fieldsets = []
|
||||||
|
@ -230,7 +230,7 @@ class CrdModelFormMixin:
|
||||||
|
|
||||||
# Process spec fields
|
# Process spec fields
|
||||||
others = []
|
others = []
|
||||||
nested_fieldsets = {}
|
top_level_fieldsets = {}
|
||||||
hidden_spec_fields = []
|
hidden_spec_fields = []
|
||||||
|
|
||||||
for field_name in self.fields:
|
for field_name in self.fields:
|
||||||
|
@ -242,45 +242,36 @@ class CrdModelFormMixin:
|
||||||
parts = field_name.split(".")
|
parts = field_name.split(".")
|
||||||
if len(parts) == 2: # Top-level spec field
|
if len(parts) == 2: # Top-level spec field
|
||||||
others.append(field_name)
|
others.append(field_name)
|
||||||
else:
|
elif (
|
||||||
parent_key = parts[1]
|
len(parts) == 3
|
||||||
if not nested_fieldsets.get(parent_key):
|
): # Second-level field - promote to top-level fieldset
|
||||||
nested_fieldsets[parent_key] = {
|
fieldset_key = f"{parts[1]}.{parts[2]}"
|
||||||
|
if not top_level_fieldsets.get(fieldset_key):
|
||||||
|
top_level_fieldsets[fieldset_key] = {
|
||||||
"fields": [],
|
"fields": [],
|
||||||
"fieldsets": {},
|
"fieldsets": [],
|
||||||
"title": deslugify(parent_key),
|
"title": f"{deslugify(parts[2])}",
|
||||||
}
|
}
|
||||||
parent = nested_fieldsets[parent_key]
|
top_level_fieldsets[fieldset_key]["fields"].append(field_name)
|
||||||
if len(parts) == 3: # Top-level within fieldset
|
else: # Third-level and deeper - group by first two levels
|
||||||
parent["fields"].append(field_name)
|
fieldset_key = f"{parts[1]}.{parts[2]}"
|
||||||
else:
|
if not top_level_fieldsets.get(fieldset_key):
|
||||||
sub_key = parts[2]
|
top_level_fieldsets[fieldset_key] = {
|
||||||
if not parent["fieldsets"].get(sub_key):
|
"fields": [],
|
||||||
parent["fieldsets"][sub_key] = {
|
"fieldsets": [],
|
||||||
"title": deslugify(sub_key),
|
"title": f"{deslugify(parts[2])}",
|
||||||
"fields": [],
|
}
|
||||||
}
|
top_level_fieldsets[fieldset_key]["fields"].append(field_name)
|
||||||
parent["fieldsets"][sub_key]["fields"].append(field_name)
|
|
||||||
|
|
||||||
# Add nested fieldsets to fieldsets
|
# Add promoted fieldsets to fieldsets
|
||||||
for group in nested_fieldsets.values():
|
for fieldset in top_level_fieldsets.values():
|
||||||
total_fields = 0
|
if len(fieldset["fields"]) == 1:
|
||||||
for fieldset in group["fieldsets"].values():
|
others.append(fieldset["fields"][0])
|
||||||
if (field_count := len(fieldset["fields"])) == 1:
|
|
||||||
group["fields"].append(fieldset["fields"][0])
|
|
||||||
fieldset["fields"] = []
|
|
||||||
else:
|
|
||||||
title = f"{group['title']}: {fieldset['title']}: "
|
|
||||||
for field in fieldset["fields"]:
|
|
||||||
self.strip_title(field, title)
|
|
||||||
total_fields += field_count
|
|
||||||
if (total_fields + len(group["fields"])) == 1:
|
|
||||||
others.append(group["fields"][0])
|
|
||||||
else:
|
else:
|
||||||
title = f"{group['title']}: "
|
title = f"{fieldset['title']}: "
|
||||||
for field in group["fields"]:
|
for field in fieldset["fields"]:
|
||||||
self.strip_title(field, title)
|
self.strip_title(field, title)
|
||||||
fieldsets.append(group)
|
fieldsets.append(fieldset)
|
||||||
|
|
||||||
# Add 'others' tab if there are any fields
|
# Add 'others' tab if there are any fields
|
||||||
if others:
|
if others:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue