parent
864c0ffc06
commit
850a791851
2 changed files with 27 additions and 9 deletions
|
|
@ -328,11 +328,8 @@ class CrdModelFormMixin:
|
||||||
field.required = False
|
field.required = False
|
||||||
|
|
||||||
# Mark advanced fields with a CSS class and data attribute
|
# Mark advanced fields with a CSS class and data attribute
|
||||||
advanced_fields = getattr(self, "ADVANCED_FIELDS", [])
|
|
||||||
for name, field in self.fields.items():
|
for name, field in self.fields.items():
|
||||||
if name in advanced_fields or any(
|
if self.is_field_advanced(name):
|
||||||
name.startswith(f"{af}.") for af in advanced_fields
|
|
||||||
):
|
|
||||||
field.widget.attrs.update(
|
field.widget.attrs.update(
|
||||||
{
|
{
|
||||||
"class": (
|
"class": (
|
||||||
|
|
@ -358,6 +355,17 @@ class CrdModelFormMixin:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def is_field_advanced(self, field_name):
|
||||||
|
advanced_fields = getattr(self, "ADVANCED_FIELDS", [])
|
||||||
|
return field_name in advanced_fields or any(
|
||||||
|
field_name.startswith(f"{af}.") for af in advanced_fields
|
||||||
|
)
|
||||||
|
|
||||||
|
def are_all_fields_advanced(self, field_list):
|
||||||
|
if not field_list:
|
||||||
|
return False
|
||||||
|
return all(self.is_field_advanced(field_name) for field_name in field_list)
|
||||||
|
|
||||||
def get_fieldsets(self):
|
def get_fieldsets(self):
|
||||||
fieldsets = []
|
fieldsets = []
|
||||||
|
|
||||||
|
|
@ -373,6 +381,7 @@ class CrdModelFormMixin:
|
||||||
"fields": general_fields,
|
"fields": general_fields,
|
||||||
"fieldsets": [],
|
"fieldsets": [],
|
||||||
"has_mandatory": self.has_mandatory_fields(general_fields),
|
"has_mandatory": self.has_mandatory_fields(general_fields),
|
||||||
|
"is_advanced": self.are_all_fields_advanced(general_fields),
|
||||||
}
|
}
|
||||||
if all(
|
if all(
|
||||||
[
|
[
|
||||||
|
|
@ -439,6 +448,9 @@ class CrdModelFormMixin:
|
||||||
title = f"{fieldset['title']}: {sub_fieldset['title']}: "
|
title = f"{fieldset['title']}: {sub_fieldset['title']}: "
|
||||||
for field in sub_fieldset["fields"]:
|
for field in sub_fieldset["fields"]:
|
||||||
self.strip_title(field, title)
|
self.strip_title(field, title)
|
||||||
|
sub_fieldset["is_advanced"] = self.are_all_fields_advanced(
|
||||||
|
sub_fieldset["fields"]
|
||||||
|
)
|
||||||
nested_fieldsets_list.append(sub_fieldset)
|
nested_fieldsets_list.append(sub_fieldset)
|
||||||
|
|
||||||
fieldset["fieldsets"] = nested_fieldsets_list
|
fieldset["fieldsets"] = nested_fieldsets_list
|
||||||
|
|
@ -455,6 +467,8 @@ class CrdModelFormMixin:
|
||||||
all_fields.extend(sub_fieldset["fields"])
|
all_fields.extend(sub_fieldset["fields"])
|
||||||
fieldset["has_mandatory"] = self.has_mandatory_fields(all_fields)
|
fieldset["has_mandatory"] = self.has_mandatory_fields(all_fields)
|
||||||
|
|
||||||
|
fieldset["is_advanced"] = self.are_all_fields_advanced(all_fields)
|
||||||
|
|
||||||
fieldsets.append(fieldset)
|
fieldsets.append(fieldset)
|
||||||
|
|
||||||
# Add 'others' tab if there are any fields
|
# Add 'others' tab if there are any fields
|
||||||
|
|
@ -465,6 +479,7 @@ class CrdModelFormMixin:
|
||||||
"fields": others,
|
"fields": others,
|
||||||
"fieldsets": [],
|
"fieldsets": [],
|
||||||
"has_mandatory": self.has_mandatory_fields(others),
|
"has_mandatory": self.has_mandatory_fields(others),
|
||||||
|
"is_advanced": self.are_all_fields_advanced(others),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@
|
||||||
<ul class="nav nav-tabs" id="myTab" role="tablist">
|
<ul class="nav nav-tabs" id="myTab" role="tablist">
|
||||||
{% for fieldset in form.get_fieldsets %}
|
{% for fieldset in form.get_fieldsets %}
|
||||||
{% if not fieldset.hidden %}
|
{% if not fieldset.hidden %}
|
||||||
<li class="nav-item" role="presentation">
|
<li class="nav-item{% if fieldset.is_advanced %} advanced-field-group collapse{% endif %}"
|
||||||
|
role="presentation">
|
||||||
<button class="nav-link {% if forloop.first %}active{% endif %}{% if fieldset.has_mandatory %} has-mandatory{% endif %}"
|
<button class="nav-link {% if forloop.first %}active{% endif %}{% if fieldset.has_mandatory %} has-mandatory{% endif %}"
|
||||||
id="{{ fieldset.title|slugify }}-tab"
|
id="{{ fieldset.title|slugify }}-tab"
|
||||||
data-bs-toggle="tab"
|
data-bs-toggle="tab"
|
||||||
|
|
@ -48,10 +49,12 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% for subfieldset in fieldset.fieldsets %}
|
{% for subfieldset in fieldset.fieldsets %}
|
||||||
{% if subfieldset.fields %}
|
{% if subfieldset.fields %}
|
||||||
|
<div {% if subfieldset.is_advanced %}class="advanced-field-group collapse"{% endif %}>
|
||||||
<h4 class="mt-3">{{ 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 %}
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue