Move fieldset nesting one level down

This commit is contained in:
Tobias Kunze 2025-06-26 11:49:18 +02:00
parent e6182f8e08
commit 90d43d1ed2

View file

@ -205,8 +205,8 @@ class CrdModelFormMixin:
def strip_title(self, field_name, label):
field = self.fields[field_name]
if field and field.label.startswith(label):
field.label = field.label[len(label) :]
if field and (position := field.label.find(label)) != -1:
field.label = field.label[position + len(label) :]
def get_fieldsets(self):
fieldsets = []
@ -230,7 +230,7 @@ class CrdModelFormMixin:
# Process spec fields
others = []
nested_fieldsets = {}
top_level_fieldsets = {}
hidden_spec_fields = []
for field_name in self.fields:
@ -242,45 +242,36 @@ class CrdModelFormMixin:
parts = field_name.split(".")
if len(parts) == 2: # Top-level spec field
others.append(field_name)
else:
parent_key = parts[1]
if not nested_fieldsets.get(parent_key):
nested_fieldsets[parent_key] = {
elif (
len(parts) == 3
): # Second-level field - promote to top-level fieldset
fieldset_key = f"{parts[1]}.{parts[2]}"
if not top_level_fieldsets.get(fieldset_key):
top_level_fieldsets[fieldset_key] = {
"fields": [],
"fieldsets": {},
"title": deslugify(parent_key),
"fieldsets": [],
"title": f"{deslugify(parts[2])}",
}
parent = nested_fieldsets[parent_key]
if len(parts) == 3: # Top-level within fieldset
parent["fields"].append(field_name)
else:
sub_key = parts[2]
if not parent["fieldsets"].get(sub_key):
parent["fieldsets"][sub_key] = {
"title": deslugify(sub_key),
"fields": [],
}
parent["fieldsets"][sub_key]["fields"].append(field_name)
top_level_fieldsets[fieldset_key]["fields"].append(field_name)
else: # Third-level and deeper - group by first two levels
fieldset_key = f"{parts[1]}.{parts[2]}"
if not top_level_fieldsets.get(fieldset_key):
top_level_fieldsets[fieldset_key] = {
"fields": [],
"fieldsets": [],
"title": f"{deslugify(parts[2])}",
}
top_level_fieldsets[fieldset_key]["fields"].append(field_name)
# Add nested fieldsets to fieldsets
for group in nested_fieldsets.values():
total_fields = 0
for fieldset in group["fieldsets"].values():
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])
# Add promoted fieldsets to fieldsets
for fieldset in top_level_fieldsets.values():
if len(fieldset["fields"]) == 1:
others.append(fieldset["fields"][0])
else:
title = f"{group['title']}: "
for field in group["fields"]:
title = f"{fieldset['title']}: "
for field in fieldset["fields"]:
self.strip_title(field, title)
fieldsets.append(group)
fieldsets.append(fieldset)
# Add 'others' tab if there are any fields
if others: