{% macro render_field_label(field, class) -%} {{ field.label(class_=class) }} {%- if field.flags.required %}*{% endif %} {%- endmacro %} {% macro render_field_description(field) %} {%- if field.errors %}
{%- elif field.description %} {{ field.description }} {%- endif %} {% endmacro %} {% macro render_field(field) %} {%- if field.widget.input_type == "submit" or field.widget.input_type == "hidden" %} {{ field(**kwargs) }} {%- else %} {%- if field.widget.input_type == "checkbox" %} {%- set group_class = "mb-3 form-check" %} {%- set input_class = "form-check-input" %} {%- set label_class = "form-check-label" %} {%- else %} {%- set group_class = "mb-3" %} {%- set input_class = "form-control" %} {%- set label_class = "form-label" %} {%- endif %} {%- if field.errors %} {%- set input_class = input_class ~ " is-invalid" %} {%- endif %}
{%- if field.widget.input_type == "checkbox" %} {{ field(class_=input_class,**kwargs) | safe }} {{ render_field_label(field, label_class) }} {%- else %} {{ render_field_label(field, label_class) }} {{ field(class_=input_class,**kwargs) | safe }} {%- endif %} {{ render_field_description(field) }}
{%- endif %} {% endmacro %} {% macro render_form_fields(form, form_opts=None, view=None) %} {% for f in form if f.widget.input_type != 'hidden' %} {% if f.widget.input_type == 'inline' %} {% set parent = form._obj if form._obj is defined else none %} {% set parent_id = view.get_pk_value(parent) if view and parent else none %} {{ render_inline_fields(f, parent_id) }} {% elif form_opts %} {% set kwargs = (form_opts.widget_args or {}).get(f.short_name, {}) %} {{ render_field(f,**kwargs) }} {% else %} {% set kwargs = {} %} {{ render_field(f,**kwargs) }} {% endif %} {% endfor %} {% for f in form if f.widget.input_type == 'hidden' %}{{ f }}{% endfor %} {% endmacro %} {% macro render_inline_row(field, child, index) %} {% set prefix = field.get_prefix(index) %} {% set child_form = field.form_class(obj=child, prefix=prefix) %}
{{ render_form_fields(child_form, form_opts=field.form_opts) }}
{% endmacro %} {% macro render_inline_fields(field, parent_id) %} {% set rows = field.data if field.is_collection else ([field.data] if field.data else []) %}

{{ field.label.text }}

{% for child in rows %} {{ render_inline_row(field, child, loop.index0) }} {% endfor %}
{% if parent_id is none %} {{ gettext("Save the parent record before managing related records.") }} {% endif %} {% if field.errors %}
{% for error in field.errors %}
{{ error }}
{% endfor %}
{% endif %}
{% endmacro %} {% macro render_form(form, action=None, form_opts=None, multipart=False, view=None, ajax_create_url=None) %}
{{ render_form_fields(form, form_opts=form_opts, view=view) }}
{% endmacro %} {% macro extra(view) %} {% if view.can_create %}{% endif %} {% if view.can_edit %}{% endif %} {% endmacro %}