{% extends "admin/base.html" %} {% macro render_model_field(field, form_data, can_edit, mode='general') -%} {% set field_type = (field.field_type or 'text')|lower %} {% set field_name = field.name|string %} {% set field_name_lower = field_name|lower %} {% set is_password_field = field_type == 'password' or 'password' in field_name_lower %} {% set fallback_value = field.default if field.default is not none else '' %} {% set raw_source = '' if is_password_field else form_data.get(field.name, fallback_value) %} {% if raw_source is string %} {% set raw_value = raw_source %} {% else %} {% set raw_value = raw_source|tojson %} {% endif %} {% set normalized_value = (raw_source|string|lower) %} {% set is_checked = raw_source is sameas true or normalized_value in ['true', '1', 'yes', 'on'] %} {% set field_disabled = (not can_edit) or field.readonly %} {% set field_label = field.label or field_name.replace('_', ' ').title() %} {% if mode == 'boolean' or field_type in ['boolean', 'switch'] %}

{{ field.help_text or "Enable or disable this value." }}

{% elif mode == 'json' or field_type == 'json' %}
JSON

{{ field.help_text or "Store valid JSON object or array." }}

{% elif mode == 'longtext' %}
article Long Text
{% if is_password_field %}

Leave blank to keep the current password.

{% elif field.help_text %}

{{ field.help_text }}

{% endif %}
{% else %}
{% if field_type == 'select' %}
expand_more
{% elif is_password_field %}

Leave blank to keep the current password.

{% elif field_type == 'email' or 'email' in field_name_lower %} {% elif field_type == 'date' %} {% else %} {% endif %}
{% endif %} {%- endmacro %} {% block content %} {% set editable_names = form_fields | map(attribute='name') | list %} {% set section_fields = namespace(general=[], long_text=[], json=[], boolean=[]) %} {% for field in form_fields %} {% set field_type = (field.field_type or 'text')|lower %} {% set field_name = field.name|string %} {% set field_name_lower = field_name|lower %} {% set sample_value = form_data.get(field.name, '') %} {% set sample_length = (sample_value|string)|length %} {% set is_json_field = field_type == 'json' or field_name_lower.endswith('_json') or field_name_lower.endswith('_data') or field_name_lower.endswith('_payload') or field_name_lower.endswith('_meta') %} {% set is_boolean_field = field_type in ['boolean', 'switch'] %} {% set is_long_text_field = field_type in ['html', 'text'] and (field_name_lower in ['description', 'content', 'body', 'summary', 'bio', 'notes', 'message'] or sample_length > 120) %} {% if is_boolean_field %} {% set section_fields.boolean = section_fields.boolean + [field] %} {% elif is_json_field %} {% set section_fields.json = section_fields.json + [field] %} {% elif is_long_text_field %} {% set section_fields.long_text = section_fields.long_text + [field] %} {% else %} {% set section_fields.general = section_fields.general + [field] %} {% endif %} {% endfor %} {% set metadata = namespace(items=[]) %} {% if not is_add_mode %} {% for meta_name, meta_value in form_data.items() %} {% set meta_key = meta_name|string %} {% set meta_key_lower = meta_key|lower %} {% if meta_key not in editable_names and meta_value is not none and (meta_value|string)|trim != '' %} {% set looks_like_metadata = meta_key_lower == 'id' or 'created' in meta_key_lower or 'updated' in meta_key_lower or 'date' in meta_key_lower or 'time' in meta_key_lower or 'login' in meta_key_lower %} {% if looks_like_metadata %} {% set metadata.items = metadata.items + [{'name': meta_key, 'value': meta_value}] %} {% endif %} {% endif %} {% endfor %} {% endif %}

{% if is_add_mode %}Add {{ verbose_name }}{% else %}Edit {{ verbose_name }}{% endif %}

{% if is_add_mode %} Create a new record in "{{ verbose_name }}". {% else %} Editing object ID: {{ object_id }} {% endif %}

{% if section_fields.general %}

General Info

Basic fields for this record.

{% for field in section_fields.general %} {{ render_model_field(field, form_data, can_edit) }} {% endfor %}
{% endif %} {% if section_fields.long_text %}

Long Text

Large text fields use expanded editors.

{% for field in section_fields.long_text %} {{ render_model_field(field, form_data, can_edit, 'longtext') }} {% endfor %}
{% endif %} {% if section_fields.json %}

Structured Data

JSON fields with formatting helpers.

{% for field in section_fields.json %} {{ render_model_field(field, form_data, can_edit, 'json') }} {% endfor %}
{% endif %} {% if section_fields.boolean or metadata.items %}
{% if section_fields.boolean %}

Flags

Boolean and switch controls.

{% for field in section_fields.boolean %} {{ render_model_field(field, form_data, can_edit, 'boolean') }} {% endfor %}
{% endif %} {% if metadata.items %}

Metadata

System generated information.

{% endif %}
{% endif %}

No unsaved changes

arrow_back Back to List {% if can_delete %} {% endif %} {% if can_edit %} {% endif %}
{% endblock %} {% block extra_head %} {{ super() }} {% endblock %} {% block extra_js %} {{ super() }} {% endblock %}