Как вызвать и обработать всплывающее окно подтверждения из сервисной функции, не прерывая транзакцию

В моем проекте Django бизнес-логика размещена на слое service. Views выполняет только функцию работы с templates. У меня есть базовый шаблон с формой и полями типа select на ней. При изменении любого поля скрипт отправляет AJAX-запрос на views. views принимает этот запрос и передает данные в сервисную функцию, которая использует их для записи в БД.

template -> views -> service -> model

Теперь мне нужно сделать функцию для вызова всплывающего окна подтверждения из сервиса для подтверждения изменения данных, получения ответа из окна и его обработки. У меня уже есть модальное окно и скрипт, который вызывает его при response.confirmation_dialog. Мне нужен механизм вызова этого окна из сервиса без прерывания транзакции.

Один из вариантов реализации заключался в отправке ответа шаблону с модальным вызовом подтверждения. При нажатии на кнопку подтверждения снова отправлялся AJAX-запрос к представлению с информацией о подтверждении. Затем эта информация отправлялась обратно в сервис, который проверял, прошло подтверждение или нет. Однако даже с одним подтверждением это выглядит плохо, и сервису может понадобиться сразу несколько проверок.

Другая попытка заключалась в использовании генератора в сервисе. Это позволило вызывать окно подтверждения, не прерывая работу функции сервиса.

def some_view(response):
     my_gen = service.get_generator(user)
     response = next(my_gen)
     service.save_generator(user, my_gen)
     return JsonResponse(response)


def some_generator():
yield {'success': False,
           'confirmation_dialog': {
               'show': True,
               'title': "Test 1",
               'message': "Test 1"
           }
           }
edit_some_model()
yield {'success': False,
           'confirmation_dialog': {
               'show': True,
               'title': "Test 2",
               'message': "Test 2"
           }
           }
edit_another_model()
yield {'success': False,
           'confirmation_dialog': {
               'show': True,
               'title': "Test 3",
               'message': "Test 3"
           }
           }
commit_changes()
yield {'success': True}

Однако это приведет к прерыванию транзакции в представлении.

Итак, мне нужно создать универсальный механизм, который позволил бы вызывать окно подтверждения из сервиса, не прерывая транзакцию. Вот пример того, как я хотел бы это реализовать:

from cmp_modals import ConfirmDialog

def some_service_func():
     if not ConfirmDialog(title="title", message="message"):
          return False

     if some_condition:
          dialog = ConfirmDialog(title="another_title", message="another_message")
          if not dialog:
               return False
          else:
               another_service_func():
          

Приблизительная версия того, что я хочу получить

Есть что-то подобное в MS Business Central, мне нужен какой-то аналог этого: https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/methods-auto/dialog/dialog-confirm-method

Вернуться на верх