diff --git a/examples/sqla/admin/main.py b/examples/sqla/admin/main.py index 64e02a5005..ee8beab510 100644 --- a/examples/sqla/admin/main.py +++ b/examples/sqla/admin/main.py @@ -225,6 +225,9 @@ class PostAdmin(ModelView): column_default_sort = ("date", True) create_modal = True edit_modal = True + can_view_details = True + details_modal = True + column_sortable_list = [ "id", "title", diff --git a/flask_admin/model/base.py b/flask_admin/model/base.py index e3ea7033d4..a03261522a 100644 --- a/flask_admin/model/base.py +++ b/flask_admin/model/base.py @@ -2446,8 +2446,19 @@ def edit_view(self) -> T_RESPONSE | str: else: template = self.edit_template + if self.can_delete: + delete_form = self.delete_form() + else: + delete_form = None + return self.render( - template, model=model, form=form, form_opts=form_opts, return_url=return_url + template, + model=model, + form=form, + form_opts=form_opts, + return_url=return_url, + delete_form=delete_form, + get_pk_value=self.get_pk_value, ) @expose("/details/") @@ -2475,12 +2486,19 @@ def details_view(self) -> T_RESPONSE | str: else: template = self.details_template + if self.can_delete: + delete_form = self.delete_form() + else: + delete_form = None + return self.render( template, model=model, details_columns=self._details_columns, get_value=self.get_detail_value, return_url=return_url, + delete_form=delete_form, + get_pk_value=self.get_pk_value, ) @expose("/delete/", methods=("POST",)) diff --git a/flask_admin/templates/bootstrap4/admin/lib.html b/flask_admin/templates/bootstrap4/admin/lib.html index a99a78ca7e..39bf6a829e 100644 --- a/flask_admin/templates/bootstrap4/admin/lib.html +++ b/flask_admin/templates/bootstrap4/admin/lib.html @@ -203,7 +203,8 @@

{{ text }}

{% endif %} {% endmacro %} -{% macro form_tag(form=None, action=None) %} +``{% macro form_tag(form=None, action=None) %} +
{{ caller() }} @@ -213,29 +214,106 @@

{{ text }}

{% macro render_form_buttons(cancel_url, extra=None, is_modal=False) %} {% if is_modal %} - - {% if extra %} - {{ extra }} - {% endif %} - {% if cancel_url %} - {{ _gettext('Cancel') }} - {% endif %} + + {% if extra %} + {{ extra }} + {% endif %} + {% if cancel_url %} + {{ _gettext('Cancel') }} + {% endif %} +
+ {{ render_delete_form() }} +
+ {% else %}
-
- - {% if extra %} - {{ extra }} - {% endif %} - {% if cancel_url is defined and cancel_url %} - {{ _gettext('Cancel') }} - {% endif %} +
+
+ + {% if extra %} + {{ extra }} + {% endif %} + {% if cancel_url is defined and cancel_url %} + {{ _gettext('Cancel') }} + {% endif %} + +
+
+ {{ render_delete_form() }} +
{% endif %} {% endmacro %} + +{% macro render_delete_form() -%} + + {% if delete_form is defined %} + + {{ delete_form.id(id='delete-id', value=get_pk_value(model)) }} + {{ delete_form.url(id='delete-url', value=return_url) }} + {% if delete_form.csrf_token is defined and delete_form.csrf_token %} + {{ delete_form.csrf_token(id='delete-csrf') }} + {% elif csrf_token is defined and csrf_token %} + + {% endif %} + + + + + + {% endif %} + +{% endmacro %} + {% macro render_form(form, cancel_url, extra=None, form_opts=None, action=None, is_modal=False) -%} {% call form_tag(action=action) %} {{ render_form_fields(form, form_opts=form_opts) }} diff --git a/flask_admin/templates/bootstrap4/admin/model/details.html b/flask_admin/templates/bootstrap4/admin/model/details.html index 4e6408b27c..b3e5fb1ff0 100644 --- a/flask_admin/templates/bootstrap4/admin/model/details.html +++ b/flask_admin/templates/bootstrap4/admin/model/details.html @@ -23,13 +23,19 @@ {% endblock %} - {% block details_search %} -
- - -
+ {% block details_actions %} +
+ {% block details_search %} +
+ + +
+ {% endblock %} + {% block details_delete %} + {{ lib.render_delete_form() }} + {% endblock %} +
{% endblock %} - {% block details_table %} {% for c, name in details_columns %} diff --git a/flask_admin/templates/bootstrap4/admin/model/modals/details.html b/flask_admin/templates/bootstrap4/admin/model/modals/details.html index 846da99234..730d8d38ae 100644 --- a/flask_admin/templates/bootstrap4/admin/model/modals/details.html +++ b/flask_admin/templates/bootstrap4/admin/model/modals/details.html @@ -10,10 +10,18 @@