Refactor raising fieldset level in CRD form
This commit is contained in:
parent
90d43d1ed2
commit
cfa726a028
2 changed files with 36 additions and 11 deletions
|
@ -240,11 +240,11 @@ class CrdModelFormMixin:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
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)
|
||||||
elif (
|
elif len(parts) == 3:
|
||||||
len(parts) == 3
|
# Second-level field - promote to top-level fieldset
|
||||||
): # Second-level field - promote to top-level fieldset
|
|
||||||
fieldset_key = f"{parts[1]}.{parts[2]}"
|
fieldset_key = f"{parts[1]}.{parts[2]}"
|
||||||
if not top_level_fieldsets.get(fieldset_key):
|
if not top_level_fieldsets.get(fieldset_key):
|
||||||
top_level_fieldsets[fieldset_key] = {
|
top_level_fieldsets[fieldset_key] = {
|
||||||
|
@ -253,19 +253,42 @@ class CrdModelFormMixin:
|
||||||
"title": f"{deslugify(parts[2])}",
|
"title": f"{deslugify(parts[2])}",
|
||||||
}
|
}
|
||||||
top_level_fieldsets[fieldset_key]["fields"].append(field_name)
|
top_level_fieldsets[fieldset_key]["fields"].append(field_name)
|
||||||
else: # Third-level and deeper - group by first two levels
|
else:
|
||||||
|
# Third-level and deeper - create nested fieldsets
|
||||||
fieldset_key = f"{parts[1]}.{parts[2]}"
|
fieldset_key = f"{parts[1]}.{parts[2]}"
|
||||||
if not top_level_fieldsets.get(fieldset_key):
|
if not top_level_fieldsets.get(fieldset_key):
|
||||||
top_level_fieldsets[fieldset_key] = {
|
top_level_fieldsets[fieldset_key] = {
|
||||||
"fields": [],
|
"fields": [],
|
||||||
"fieldsets": [],
|
"fieldsets": {},
|
||||||
"title": f"{deslugify(parts[2])}",
|
"title": f"{deslugify(parts[2])}",
|
||||||
}
|
}
|
||||||
top_level_fieldsets[fieldset_key]["fields"].append(field_name)
|
|
||||||
|
|
||||||
# Add promoted fieldsets to fieldsets
|
sub_key = parts[3]
|
||||||
|
if not top_level_fieldsets[fieldset_key]["fieldsets"].get(sub_key):
|
||||||
|
top_level_fieldsets[fieldset_key]["fieldsets"][sub_key] = {
|
||||||
|
"title": deslugify(sub_key),
|
||||||
|
"fields": [],
|
||||||
|
}
|
||||||
|
top_level_fieldsets[fieldset_key]["fieldsets"][sub_key][
|
||||||
|
"fields"
|
||||||
|
].append(field_name)
|
||||||
|
|
||||||
for fieldset in top_level_fieldsets.values():
|
for fieldset in top_level_fieldsets.values():
|
||||||
if len(fieldset["fields"]) == 1:
|
nested_fieldsets_list = []
|
||||||
|
for sub_fieldset in fieldset["fieldsets"].values():
|
||||||
|
if len(sub_fieldset["fields"]) == 1:
|
||||||
|
# If nested fieldset has only one field, move it to parent
|
||||||
|
fieldset["fields"].append(sub_fieldset["fields"][0])
|
||||||
|
else:
|
||||||
|
# Keep as nested fieldset with proper title stripping
|
||||||
|
title = f"{fieldset['title']}: {sub_fieldset['title']}: "
|
||||||
|
for field in sub_fieldset["fields"]:
|
||||||
|
self.strip_title(field, title)
|
||||||
|
nested_fieldsets_list.append(sub_fieldset)
|
||||||
|
|
||||||
|
fieldset["fieldsets"] = nested_fieldsets_list
|
||||||
|
total_fields = len(fieldset["fields"]) + len(nested_fieldsets_list)
|
||||||
|
if total_fields == 1 and len(fieldset["fields"]) == 1:
|
||||||
others.append(fieldset["fields"][0])
|
others.append(fieldset["fields"][0])
|
||||||
else:
|
else:
|
||||||
title = f"{fieldset['title']}: "
|
title = f"{fieldset['title']}: "
|
||||||
|
@ -287,6 +310,8 @@ class CrdModelFormMixin:
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fieldsets.sort(key=lambda f: f.get("hidden", False))
|
||||||
|
|
||||||
return fieldsets
|
return fieldsets
|
||||||
|
|
||||||
def get_nested_data(self):
|
def get_nested_data(self):
|
||||||
|
|
|
@ -31,9 +31,9 @@
|
||||||
{% for field in fieldset.fields %}
|
{% for field in fieldset.fields %}
|
||||||
{% with field=form|get_field:field %}{{ field.as_field_group }}{% endwith %}
|
{% with field=form|get_field:field %}{{ field.as_field_group }}{% endwith %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for subfieldset in fieldset.fieldsets.values %}
|
{% for subfieldset in fieldset.fieldsets %}
|
||||||
{% if subfieldset.fields %}
|
{% if subfieldset.fields %}
|
||||||
<h4>{{ subfieldset.title }}</h4>
|
<h4 class="mt-3">{{ subfieldset.title }}</h4>
|
||||||
{% for field in subfieldset.fields %}
|
{% for field in subfieldset.fields %}
|
||||||
{% with field=form|get_field:field %}{{ field.as_field_group }}{% endwith %}
|
{% with field=form|get_field:field %}{{ field.as_field_group }}{% endwith %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue